リムナンテスは愉快な気分

徒然なるままに、言語、数学、音楽、プログラミング、時々人生についての記事を書きます

楔形文字で学ばないアッカド語文法(15)G語幹I-ʾ型弱動詞

この記事は

  • G語幹I-ʾ型弱動詞
  • 不規則活用動詞 alākum「行く」

についての記事です。

弱動詞解説回ショートカット

1. G語幹I-ʾ型弱動詞の概論

第15回では語根の第一子音が ʾ の時の活用を学びます(ʾ, h, ḥ, ʿ, ġ, y、つまりʾ1-5, ʾ7、w=ʾ6は語頭で脱落しないので、別枠で第18回で紹介します)。

I-ʾ型弱動詞は、amārum や abātum など a から始まる I-a 型、epēšum や ezēbum など e から始まる I-e 型の大きく2つに分けられます。この違いはセム祖語の時から脱落した第一子音が何かによって生まれます(下の表を参照)。歴史的に、第一子音が ʾ, h (I-ʾ1-2)の語は I-a に、ḥ, ʿ (I-ʾ3-4)の語は(不定形の場合)隣接する母音が a > e に変化することで I-e になりました。また、第一子音が y (I-y; I-ʾ7)の語は I-e に合流、ġ (I-ʾ5)の語は第一子音が ḫ に変化したり、I-a になったり、稀に I-e になったり、ということで、結局は I-a か I-e のどちらかになったので、この2つを考えれば十分です。

活用の仕方は基本的にはどちらも同じで、不定形(parāsum型)、動形容詞(parsum型)では語頭に第一子音が来ますが、このときは単純に子音が無いものとみなします。過去形(iprus型)では第一子音の前の母音が長母音化します。

第一子音 分類
ʾ=ʾ1 amārum < *ʾamārum I-a
h=ʾ2 abātum < *habātum I-a
ḥ=ʾ3 epēšum < *ḥapāšum I-e
ʿ=ʾ4 ezēbum < *ʿazābum I-e
ġ=ʾ5 - *1 第一子音がḫに変化、またはI-a、稀にI-e
y=ʾ7 ešerum < *yašārum I-e に合流

G過去形の活用表

接頭辞の母音と語幹頭の母音が連続するため、I-a 型では ia > ī, aa > ā のように接頭辞の母音が伸びるように変化します。I-e 型では語幹頭の e の影響で ie > ī, ae > のように変化します。

1a2ā3um
(一般形)
> a2ā3um / e2ē3um
(I-a / I-e)
I-a (I-ʾ1-2) I-e (I-ʾ3-4, I-y)
amārum (I-ʾ1)
(見る)
abātum (I-ʾ2)
(滅ぼす)
epēšum (I-ʾ3)
(する)
ezēbum (I-ʾ4)
(捨てる)
単数 3cs i12V3 > ī2V3 īmur ībut īpuš īzib
2ms ta12V3 > [tā/tē]2V3 tāmur tābut tēpuš tēzib
2fs ta12V3ī > [tā/tē]2V3ī tāmurī tābutī tēpušī tēzibī
1cs a12V3 > [ā/ē]2V3 āmur ābut ēpuš ēzib
複数 3mp i12V3ū > ī2V3ū īmurū ībutū īpušū īzibū
3fp i12V3ā > ī2V3ā īmurā ībutā īpušā īzibā
2cp ta12V3ā > [tā/tē]2V3ā tāmurā tābutā tēpušā tēzib
1cp ni12V3 > nī2V3 nīmur nībut nīpuš nīzib

G動形容詞の活用表

通常の動詞と同様に、女性単数形で母音が出現します。

1a2V3-
(一般形)
I-a (I-ʾ1-2) I-e (I-ʾ3-4, I-y)
amir- (I-ʾ1)
(見る)
abit- (I-ʾ2)*2
(滅ぼす)
epiš- (I-ʾ3)
(する)
ezib- (I-ʾ4)
(捨てる)
男性 女性 男性 女性 男性 女性 男性 女性 男性 女性
単数 主格 1a23um 1a2V3tum amrum amirtum abtum abittum epšum epištum ezbum ezibtum
属格 1a23im 1a2V3tim amrim amirtim abtim abittim epšim epištim ezbim ezibtim
対格 1a23am 1a2V3tam amram amirtam abtam abittam epšam epištam ezbam ezibtam
複数 主格 1a23ūtum 1a23ātum amrūtum amrātum abtūtum abtātum epsūtum epsātum ezbūtum ezbātum
斜格 1a23ūtim 1a23ātim amrūtim amrātim abtūtim abtātim epsūtim epsātim ezbūtim ezbātim
なお ešērum の動形容詞は例外的に išar- という語幹を使います。

2. alākum「行く」の活用

alākum「行く」(< *halākum)はG過去形で不規則活用します。語形はI-ʾ型ですが、I-n型のように第2子音 l を重ねて作ります。幹母音は i。

1a2ā3um > na2ā3um
(一般形 > 1=n)
alākum
(行く)
単数 3cs i12V3 > i22V3 illik
2ms ta12V3 > ta22V3 tallik
2fs ta12V3ī > ta22V3ī tallikī
1cs a12V3 > a22V3 allik
複数 3mp i12V3ū > i22V3ū illikū
3fp i12V3ā > i22V3ā illikā
2cp ta12V3ā > ta22V3ā tallikā
1cp ni12V3 > ni22V3 nillik

3. まとめ

  • I-ʾ 型弱動詞では第一子音を無音として動詞を活用する。G過去形では母音変化を生じる。
  • alākum「行く」は I-ʾ 型だが、例外的に I-n 型の活用をする。

←前:楔形文字で学ばないアッカド語文法(14)同格・接続詞省略
→次:(16)?

参考文献
  • J. Huehnergard, A Grammar of Akkadian (3rd ed. 2011), Harvard Semitic Museum Studies 45, ISBN 978-1-57506-922-7.
  • D. Snell, Enkonduko en la Akadan (Tria, reviziita eldono), esperantigita de Michael Wolf, Biblical Institute Press, Rome, 1988, ISBN: 88-7653-566-7.

*1:例が見当たらなかった。

*2:資料が少ないため推測。自信ない。

楔形文字で学ばないアッカド語文法(14)同格・接続詞省略

この記事は

  • 等位接続接辞 -ma
  • 接続詞省略

についての記事です。

1. 等位接続接辞

文と文の等位接続を表す単語 u がありました。
アッカド語では、文末の動詞に接辞 -ma をつけることでも等位接続を表すことができます。

u と -ma の用法:
(1) -ma は動詞の法が同じ2文、つまり直接法なら直接法、接続法なら接続法同士をつなげる。u は特に制約はない。

(2) u で繋いだ2つの節は意味的に等価。-ma を使うと後段の節(主節)のほうが意味的に強調される。

(3) -ma で繋ぐと論理接続(~なので、~のとき、~なら、など)のニュアンスがでる。
-ma を使うと、従属節(-ma がついている方)が起こった結果、主節の出来事が起こった、という因果関係を表すことができます。

ilū šarram ul iškunū-ma mātum iḫliq.
 神々は王を置かなかったので、国は滅んだ。

iškun 置いた < šakānum
m̄atum 国、土地
iḫliq 滅んだ < ḫalāqum

上の文では、国が滅んだ(mātum iḫliq)原因は神々が王を置かなかったから(ilū šarram ul iškunū)、ということを示唆しています。
一方で、 u を使った場合は添加(そして、加えて、など)の意味が出ます。

bītam iṣṣurū u kaspam itti šarrim imḫurū.
 彼らは家を守り、そして王から銀を受け取った。

bītum
iṣṣur 守った < naṣārum
kaspum
imḫur 受け取った < maḫārum

(4) アッカド語には「しかし」という逆説の単語がないため、 -ma でも u でも逆説を表す場合がある。

dayyānum ana šadîm ikšud-ma ṣābam nakram ul iṭṭul.
 裁判官は山に着いたが、敵の軍隊が見えなかった。

dayyānum 裁判官
šadûm
ṣābum 軍隊
nakrum 敵の
iṭṭul 見えた < naṭālum

u はともかく -ma については順接でも逆説でも「<従属節>した結果<主節>であった」という因果関係を表しており、一貫していると思う。

(5) 稀に -ma u が使われる。

(6) 「または」は ū または ū lū で表す。

2. 接続表現の省略

アッカド語では接続表現がなくても節と節を続けることで接続の意味を表すことが可能です。

šarrum wardam iṭrud wardum ul ikšud.
 王は奴隷を送った。(しかし)奴隷は来なかった。


←前:楔形文字で学ばないアッカド語文法(13)G語幹III型弱動詞
→次:(15)?

参考文献
  • J. Huehnergard, A Grammar of Akkadian (3rd ed. 2011), Harvard Semitic Museum Studies 45, ISBN 978-1-57506-922-7.
  • D. Snell, Enkonduko en la Akadan (Tria, reviziita eldono), esperantigita de Michael Wolf, Biblical Institute Press, Rome, 1988, ISBN: 88-7653-566-7.

楔形文字で学ばないアッカド語文法(13)G語幹III型弱動詞

この記事は

  • G語幹III型弱動詞

についての記事です。

弱動詞解説回ショートカット

1. G語幹III型弱動詞の概論

第11回で、アッカド語では ʾ, h, ḥ, ʿ, ġ といった子音が消失したり、w, y が場合によっては消失するというお話をしました。第13回では、これら ʾ, h, ḥ, ʿ, ġ, w, y がG語幹3番目の子音であるような動詞(G語幹III型弱動詞)の活用についてみていきます。

G語幹III型弱動詞は、語根子音の3番目が弱化するタイプの動詞です。語根の3番目の子音が ʾ, h, ḥ, ʿ, ġ, w, y で語末に来たときに、例えば、

  • ibni「彼女が建てた」(< *ibniy < *b–n–y)
  • tamla「貴男が満たした」(< *tamlaʾ < *m–l–ʾ)
  • nilqe「我々が取った」(< *nilqe < *nilqaḥ < *l–q–ḥ)

といったように子音脱落します。

また、 ʾ, h, ḥ, ʿ, ġ, w, y が別の子音の前に置かれるとき(例えばG動形容詞の女性単数)は、脱落して直前の母音が伸びます。

  • šemītum「聞かれた (fs, nom.)」 (< *šamiʿtum < *š-m-ʿ「聞く」)
  • zakūtum「明らか (fs, nom.)」(< *zakuwtum < *z-k-w「明らかである」)

第7回の復習ですが、G動形容詞の語幹が 1a2V3- 、女性形が 1a2V3tum となるのですが、上の例ではちょうど3の部分の子音(šamiʿ- の ʿ、zakuw- の w)が脱落して直前の母音Vが長くなっています(1a2V3tum → 1a2tum)。ちなみに、「聞く」は動作他動詞なのでG動形容詞は受動、「明らかである」は状態動詞なので記述の意味の形容詞になります。

また、 ʾ, h, ḥ, ʿ, ġ, w, y に母音が続くとき(例えば不定形語尾 -um)、子音変化、母音変化を伴います。

  • ibnû「彼が建てた」(< *ibniū < *ibniyū)
  • tamlâ「貴方たちが満たした」 (< *tamlaā < *tamlaʾā)
  • ilqeā「彼女らが取った」(< *ilqeḥā < *ilqaḥā)
  • banûm「建てること (nom.)」(< *banāum < *banāyum)
  • zakîm「明らか(ms, gen.)」 (< *zakuim < *zakuwim)

成り立ちとしては上記の通りというだけなので、元の子音が何かということは覚えなくて大丈夫です(というより実はG過去形から多少推測できるのですが、これは後ほど触れます)。

2. G語幹III型弱動詞の不定

G不定詞の活用について、banûm「建てる」と leqêm「取る」を例に見ていきます。

1a2ā3-
(一般形)
banā-
(建てる)
leqē-
(取る)
主格 1a2ûm banûm leqûm
属格 1a2êm banêm leqêm
対格 1a2âm / 1a2ēam banâm leqēam
主格は -ûm、属格は -êm、対格は -âm / -ēam (語幹が ā で終わるときは -âm、語幹が ē で終わるときは -ēam)です。

G不定詞は 1a2ā3um で作れますが、III型弱動詞では常に第3子音が脱落するので実質的に語幹は 1a2ā- という形をとります。

  • *banāyum > *banāum > banûm
  • *banāyim > *banāim > banêm
  • *banāyam > *banāam > banâm

しかしながら、第3子音が ḥ, ʿ だったものについては a > e に変化する(第11回参照)ので、語幹が 1e2ē- になるものもあります。

  • *laqāḥum > *laqēḥum > *laqēum > *leqēum > leqûm
  • *laqāḥim > *laqēḥim > *laqēim > *leqēim > leqêm
  • *laqāḥam > *laqēḥam > *laqēam > leqēam

3. G語幹III型弱動詞の過去形

G過去形語幹は 12V3- という形で、この幹母音 V は動詞ごとに異なり覚えないといけないというものでした(第6回参照)。III型弱動詞でも基本的には幹母音を覚えないといけないのですが、実は消失した第3子音とある程度対応関係があります。

語根の第3子音が y のとき III-y、幹母音が i のとき III-i 、などと表記すると、

  • 語根が III-y → 幹母音が i (III-i):*ibniy > ibni「建てた」
  • 語根が III-w→ 幹母音が u (III-u):*iḫduw > iḫdu「返答した」
  • 語根が III-ʾ / III-h → 幹母音が a (III-a):*imlaʾ > imla「満たした」
  • 語根が III-ḥ / III-ʿ → 幹母音が e (III-e):*ilqaḥ > *ilqeḥ > ilqe「建てた」

活用表にすると以下の通りです。

1a2ā3um > 1a2ûm
(一般形 > 3=∅)
banûm (III-i)
(建てる)
ḫadûm (III-u)
(返答する)
malûm (III-a)
(満たす)
leqûm (III-e)
(取る)
単数 3cs i12V3 > i12V ibni iḫdu imla ilqe
2ms ta12V3 > ta12V tabni taḫdu tamla telqe / talqe
2fs ta12V3ī > ta12î tabnî taḫdî tamlî telqî / talqî
1cs a12V3 > a12V abni aḫdu amla elqe / alqe
複数 3mp i12V3ū > i12û ibnû iḫdû imlû ilqû
3fp i12V3ā > i12Vā ibniā iḫdâ imlâ ilqeā
2cp ta12V3ā > ta12Vā tabniā taḫdâ tamlâ telqeā / talqeā
1cp ni12V3 > ni12V nibni niḫdu nimla nilqe

4. G語幹III型弱動詞の動形容詞

概要で述べた通り、III型弱動詞ではG動形容詞語幹 1a2V3- (第7回参照)の第3子音が落ちまして、殆どの場合で幹母音 V は i です。

  • bani- (< *baniy-) 「建てられた」
  • mali- (< *maliʾ-) 「満たされた」
  • ḫadi- (< *ḫadiw-) 「幸せな」

ごく稀に u になることがあります。

  • zaku- (< *zakuw-)「明らかな」

III-e 動詞では、ほとんどの場合で語幹の a が e に変化します。

  • leqi- (< laqi- < *laqiḥ-)


1a2V3- > 1a2V-
(一般形 > 3=∅)
rabi-
(良い)
šemi-
(聞かれた)
zaku-
(取る)
男性 女性 男性 女性 男性 女性 男性 女性
単数 主格 1a23um
> 1a2ûm
1a2V3tum
> 1a2V̄tum
rabûm rabītum šemûm šemītum zakûm zakūtum
属格 1a23im
> 1a2îm
1a2V3tim
> 1a2V̄tim
rabîm rabītim šemîm šemītim zakîm zakūtim
対格 1a23am
> 1a2Vām
1a2V3tam
> 1a2V̄tam
rabiam rabītam šemiam šemītam zakâm zakūtam
複数 主格 1a23ūtum
> 1a2ûtum
1a23ātum
> 1a2Vātum
rabûtum rabiātum šemûtum šemiātum zakûtum zakâtum
斜格 1a23ūtim
> 1a2ûtim
1a23ātim
> 1a2Vātim
rabûtim rabiātim šemûtim šemiātim zakûtim zakâtim

5. まとめ

  • 第3語根が ʾ, h, ḥ, ʿ, ġ, w, y のとき脱落する。


←前:楔形文字で学ばないアッカド語文法(12)名詞由来形容詞・指示語
→次:楔形文字で学ばないアッカド語文法(14)同格・接続詞省略

参考文献
  • J. Huehnergard, A Grammar of Akkadian (3rd ed. 2011), Harvard Semitic Museum Studies 45, ISBN 978-1-57506-922-7.
  • D. Snell, Enkonduko en la Akadan (Tria, reviziita eldono), esperantigita de Michael Wolf, Biblical Institute Press, Rome, 1988, ISBN: 88-7653-566-7.

トロピカル代数で機械学習〜トロピカル回帰直線を作る〜【実装編】


トロピカル演算を使ってトロピカルに単回帰したい。

理論サイドを【理論編】で話しました。翻って【実装編】ではPythonを使って単回帰モデルを実装します。
「トロピカル演算とは何ぞや?」とか、詳細な数学的議論を追いたい方は【理論編】をご覧ください。

limnanthaceae.hatenablog.com

理論(概要)

トロピカル演算をMax-plus演算とする。加法と乗法を  \mathbb{R}\cup\{-\infty\} に対して
\begin{align}
a \oplus b & = \max(a, b) \\
a \otimes b & = a + b
\end{align}
で定義する。

普通の線形回帰は(単回帰なら)直線  y=ax+b に回帰させるわけだが、トロピカル演算の下ではトロピカル直線
\begin{align}
y=a \otimes x \oplus b=\max(a+x,b)
\end{align}
に回帰させる。この時の推定パラメータは、
\begin{align}
\hat{a}&=\min_i (y_i-x_i) \\ \hat{b}&=\min_i y_i
\end{align}
となる(Greatest Lower Estimate; GLE)。あるいは、 \circledcirc をMax-plus行列積として、
\begin{align}
\tilde{a}&=\hat{a}+\mu \\ \tilde{b}&=\hat{b}+\mu \\ \mu&=\frac{1}{2}\|\boldsymbol{X}\circledcirc\hat{\boldsymbol{w}}-\boldsymbol{y}\|_\infty
\end{align}
となる(Minimum Max Absolute Error; MMAE)。これだけです*1

toy model

ノイズが乗ったトロピカル直線  y=-2\otimes x \oplus 3 + \varepsilon, \varepsilon\sim\mathcal{N}(0,0.25) を用意します。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1,12,200)
arr_3 = np.ones(200)*3
p = np.stack([x-2,arr_3])
y = p.max(axis=0) + np.random.randn(200)*0.25

plt.scatter(x,y,marker=".")
plt.show()


このいかにもトロピカル回帰してほしそうな顔をしているデータに対して、トロピカル単回帰でトロピカル直線  y=a\otimes x \oplus b にfittingさせる処理を実装していきます。

さてトロピカル単回帰では、Greatest Lower Estimation (GLE)の推定パラメータ  \hat{a}, \hat{b}
\begin{align}
\hat{a}&=\min_i (y_i-x_i) \\ \hat{b}&=\min_i y_i
\end{align}
で計算できるので、これを実装します。

def fit(x, y):
    # GLE
    a_hat = np.min(y-x)
    b_hat = np.min(y)
    coef_ = [a_hat, b_hat]

予測では、入力データの各  x に対して、
\begin{align}
y=\hat{a}\otimes x \oplus\hat{b}=\max(\hat{a}+x,\hat{b})
\end{align}
を返します。

def predict(x):
    a = coef_[0]
    b = coef_[-1]
    arr_b = np.ones(len(x))*b
    y_pred = np.stack([x+a, arr_b]).max(axis=0)

    return y_pred

scikit-learnと使用感を合わせたいのでクラス化しておく。MMAEをするために必ずGLEするので、GLEとMMAEで共通化してます。引数を`gle=True`にして回すとGLEで止まる仕様。

class MaxPlusRegression:
    def __init__(self, gle=False) -> None:
        self.gle = gle

    def fit(self, x, y):
        # GLE
        a_hat = np.min(y-x)
        b_hat = np.min(y)
        self.coef_ = [a_hat, b_hat]

        if self.gle:
            return self

        # MMAE
        y_hat = self.predict(x)
        self.mu_ = np.max(y-y_hat)/2
        a_tilde = a_hat + self.mu_
        b_tilde = b_hat + self.mu_
        self.coef_ = [a_tilde, b_tilde]

        return self

    def predict(self, x):
        a = self.coef_[0]
        b = self.coef_[-1]
        arr_b = np.ones(len(x))*b
        y_pred = np.stack([x+a, arr_b]).max(axis=0)

        return y_pred


通常のLinear Regression、トロピカルのGreatest Lower Estimation、Minimum Max Absolute Errorで回帰した結果は以下の通り。

# LR
reg = LinearRegression().fit(x.reshape(-1, 1),y)
y_lr = reg.predict(x.reshape(-1, 1))

# GLE
reg_gle = MaxPlusRegression(gle=True).fit(x, y)
y_hat = reg_gle.predict(x)

# MMAE
reg_mmae = MaxPlusRegression().fit(x, y)
y_tilde = reg_mmae.predict(x)

plt.scatter(x, y, marker=".", c="gray", alpha=0.5)
plt.plot(x, y_lr, label="LSE")
plt.plot(x, y_hat, label="GLE")
plt.plot(x, y_tilde, label="MMAE")

plt.legend()
plt.show()

各回帰手法を使った予測に関する誤差評価は次の通り。

手法 RMSE MaxError \hat{a} \hat{b}
線形回帰 0.999 2.001 0.554 1.857
GLE 0.585 1.226 -2.513 2.475
MMAE 0.262 0.613 -1.900 3.088

ここで、RMSEは平均平方根二乗誤差
\begin{align}
RMSE = \sqrt{\frac{1}{N}\sum_i(y_i - \hat{y}_i)^2}
\end{align}
で、観測値と予測値の差の2乗の和の平均の平方根、というやつなので、値が小さいほど誤差が小さい=よく予測できていると見做せます。
また、ここでMaxErrorと書いたのは誤差の\ell_\infty-ノルムを取ったもので、つまり
\begin{align}
MaxError = \max_i\left(|y_i - \hat{y}_i|\right)
\end{align}
回帰直線から最も外れた値との差(距離)なので、やっぱり値が小さいほどよく予測できていると見做せる指標。
先の表を見ると、通常の線形回帰は精度がいまいち(RMSE=0.999、MaxError=2.001)な一方で、やはりこの中ではMMAEが最良の精度(RMSE=0.262、MaxError=0.613)を誇るのがよくわかりますね(当たり前だけど)。

応用:Davisデータセット

Davisデータセットは、200人分の身長と体重が記録されたデータセットで、元データは下記URLから取得できます。
https://vincentarelbundock.github.io/Rdatasets/datasets.html

Davisデータセットの散布図をPythonで描いてみます。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('https://vincentarelbundock.github.io/Rdatasets/csv/carData/Davis.csv', index_col=False)
df = df[['weight', 'height']]
a, b = df.iloc[11]
df.iloc[11] = b, a

data = df.to_numpy()

plt.gca().set_aspect('equal', adjustable='box')
plt.scatter(data[:,0], data[:,1], s=10, marker='o', alpha=0.3)
plt.grid(color='gray', linestyle='dotted', linewidth=1)

Davisデータセットには外れ値(身長と体重があべこべ)があるので、そのデータレコードだけスワップしておきました(上の画像は修正済です)。

またしてもトロピカル回帰してほしそうな顔(偏見)をしているデータですね。まあ体重が増えやすい一方で身長ってそんなに増えないというか、なんとなく頭打ちしそうなので、線形よりトロピカルではないか?という推測はそんなに間違ってないと思うんですよね。ということで、このデータに対してトロピカル単回帰を試してみます。

今回はmin-plusの方がfitしそうなデータ分布をしてるんで、各演算を全て逆にして計算します。つまり、加法 \ominus \min 、乗法 \oslash を通常の加法で定義したMin-plus代数上のトロピカル直線
\begin{align}
y=a \oslash x \ominus b=\min(a+x,b)
\end{align}
に回帰することを考えると、Greatest Upper Estimate (GUE)*2
\begin{align}
\hat{a}&=\min_i (y_i-x_i) \\ \hat{b}&=\min_i y_i
\end{align}
で計算でき、 \circledast をMin-plus行列積とすると、Maximum Min Absolute Error (MMAE)*3
\begin{align}
\tilde{a}&=\hat{a}+\mu \\ \tilde{b}&=\hat{b}+\mu \\ \mu&=\frac{1}{2}\|\boldsymbol{X}\circledast\hat{\boldsymbol{w}}-\boldsymbol{y}\|_\infty
\end{align}
となります。先ほどのMaxPlusRegressionクラスを流用してMinPlusRegressionクラスを実装すると以下の通り。

class MinPlusRegression:
    def __init__(self, gue=False) -> None:
        self.gue = gue

    def fit(self, x, y):
        # GUE
        a_hat = np.max(y-x)
        b_hat = np.max(y)
        self.coef_ = [a_hat, b_hat]

        if self.gue:
            return self

        # MMAE
        y_hat = self.predict(x)
        self.mu_ = np.min(y-y_hat)/2
        a_tilde = a_hat + self.mu_
        b_tilde = b_hat + self.mu_
        self.coef_ = [a_tilde, b_tilde]

        return self

MinPlusRegressionクラスを使って回帰を実装します。toymodelの時と同様に、通常のLinear Regression、トロピカルのGreatest Upper Estimation、Maximum Min Absolute Errorで回帰します。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
from tplearn import MinPlusRegression

x = data[:,0]
y = data[:,1]
x_hat = np.linspace(40,120,200)

# LR
reg = LinearRegression().fit(x.reshape(-1, 1),y)
y_lr = reg.predict(x_hat.reshape(-1, 1))

# GUE
reg_gue = MinPlusRegression(gue=True).fit(x, y)
y_hat = reg_gue.predict(x_hat)

# MMAE
reg_mmae = MinPlusRegression().fit(x, y)
y_tilde = reg_mmae.predict(x_hat)

plt.gca().set_aspect('equal', adjustable='box')
plt.scatter(data[:,0], data[:,1], s=10, marker='o', alpha=0.3)
plt.grid(color='gray', linestyle='dotted', linewidth=1)
plt.plot(x_hat, y_lr, label="LSE")
plt.plot(x_hat, y_hat, label="GUE")
plt.plot(x_hat, y_tilde, label="MMAE")

plt.legend()
plt.show()

この図だけを見ると、もしかしたらただの線形回帰が一番精度よさそうにも見えるかもしれません。が、各回帰手法を使った予測に関する誤差評価は次の通り。

手法 RMSE MaxError \hat{a} \hat{b}
線形回帰 17.35 41.62 0.517 136.8
GUE 16.38 35.00 123.0 197.0
MMAE 6.559 17.5 105.5 179.5

なんとGUEですら通常の線形回帰を上回る結果に。これは流石に意外だった。MMAEは文句なし。

当然古典的なモデルでももっとfitする関数はあると思いますが、説明可能性と天秤にかければトロピカル回帰、結構いいのではないでしょうか。

さらに、MMAEは  標準体重(\rm{kg}) = 身長(\rm{m})^2 \times 22 を比較的よく説明できています。
おおよそ、標準体重50kgで151cm、60kgで165cm、70kgで179cmが理想的なようですが、線形回帰よりMMAEの方が近い値を予測できています。

トロピカル回帰自体そこまで研究進んでないようなので、今後の発展に期待。

*1:なんでしょうね、理論の難しさに比べて実装がクソ簡単なんですが。

*2:造語です。原著論文には無いです。

*3:これも造語です。

トロピカル代数で機械学習〜トロピカル回帰直線を作る〜【理論編】


皆さんは「トロピカル幾何」とか「トロピカル演算」とか「トロピカル代数」というものをご存じでしょうか。

名前からして面白そうだなぁ~とは思いつつ、何に使うかさっぱり分かりませんでした。ですが、先日面白い記事を見つけまして、トロピカル演算を使うとグラフの最短経路問題が解けるみたいで、
qiita.com
これができるのなら、「最短経路問題のアルゴリズムが開発されてるなら機械学習もあるやろwww」とも思うわけですよ。

で、調べたところやっぱりありまして、最近の研究*1によると、どうやらトロピカル演算を用いた

  • 深層学習
  • 確率グラフィカルモデル
  • 線形回帰

というのはもうすでに開発されているらしい*2

というわけで、我々はトロピカル線形回帰の奥地へと進むのであった…

この記事の方針

厳密な数学的議論というよりは、「数学的に理解する」ことを優先します。
途中、論証がガバい箇所があるかもしれませんが、赦してください。

忙しい人向け

  • トロピカル連立方程式を解く(逆行列を定義する)のは超絶むずかしい
  • 双対演算を導入すると双対なベクトル変換がガロア接続になる
  • ガロア接続の性質を使ってGLE(greatest lower estimate)→MMAE(minimum max absolute error)の順に回帰係数を推定する

普通の単回帰(最小二乗法)

復習ということで、通常の演算による通常の単回帰をおさらいします。

 N 個の入力データ  (x_i, y_i)があるとします。

このデータを直線  y=ax+b に単回帰したいとします。ここで、実際にはデータがきれいに直線に乗ることはあり得ず幾らかノイズ(誤差)が入るはずなので、各データの回帰値と観測値の誤差を \varepsilon_i とすると、
\begin{align}
y_i = (ax_i+b)+\varepsilon_i
\end{align}
という関係になっているはずです。最小二乗法では、データ全体で、この誤差の2乗の和が最小になってほしいので、
\begin{align}
\|\varepsilon\|_2=\|ax_i+b-y_i\|_2=\sum_i^N(ax_i+b-y_i)^2
\end{align}
を最小化すればよいということでした(別に二乗じゃなくても何でもいいのですが、微分しやすいので二乗です)。
最終的には  a,b でそれぞれ偏微分して 0 になるところが \|\varepsilon\|_2 の最小値なので、頑張って解くと解けます*3

単回帰の場合、行列で書くと
\begin{align}
\label{eq:vecdef}
\boldsymbol{X} =
\begin{bmatrix}
x_1 & 1 \\
\vdots & \vdots \\
x_N & 1
\end{bmatrix}
, \quad
\boldsymbol{w} =
\begin{bmatrix}
a \\
b
\end{bmatrix}
, \quad
\boldsymbol{y} =
\begin{bmatrix}
y_1 \\
\vdots \\
y_N
\end{bmatrix}
\end{align}
から、誤差
\begin{align}
\|\boldsymbol{X}\boldsymbol{w}-\boldsymbol{y}\|_2
\end{align}
を最小にする  \boldsymbol{w} を導出すればよく、\boldsymbol{w}偏微分してよしなにやると、推定値 \hat{\boldsymbol{w}} は結局
\begin{align}
\hat{\boldsymbol{w}}=(\boldsymbol{X}^\top \boldsymbol{X})^{-1} \boldsymbol{X}^\top \boldsymbol{y}
\end{align}
を計算すればよいということになります。

トロピカルな単回帰

さて、トロピカル版の線形単回帰をやるわけですが、その前にトロピカル半環における演算をおさらいします。

トロピカル半環とは、実数に無限小を加えた集合 \mathbb{R}\cup\{-\infty\} に対して、加法をmax関数、乗法を + (通常の加法)で定義した代数構造(Max-plus 代数)です*4。以降、トロピカル加法を \oplus、トロピカル乗法を \otimes と表記することにすると、トロピカル半環における加法と乗法は a,b\in \mathbb{R}\cup\{-\infty\} に対して
\begin{align}
a \oplus b & := \max(a,b) \\
a \otimes b & := a + b
\end{align}
と定義されます(半環とは何ぞや?とか、本当に半環になるのかとかまで話すとすごく長くなるのでここでは割愛します)。
ちなみに実数に無限小 -\infty を加えているのは、これが加法零元(「ゼロ」)だからです。つまり、どんな数 a に対しても、トロピカル加法で -\infty を足しても a のままです(計算してみてください)。

というわけで、今回回帰したい(一変数)トロピカル直線は
\begin{align}
y=a \otimes x \oplus b = \max (a+x, b)
\end{align}
となります。

さて、 N 個の入力データ  (x_i, y_i) が上記のトロピカル直線に乗っているとします。行列  \boldsymbol{X}、ベクトル \boldsymbol{w}, \boldsymbol{y}
\begin{align}
\boldsymbol{X} =
\begin{bmatrix}
x_1 & 0 \\
\vdots & \vdots \\
x_N & 0
\end{bmatrix}
, \quad
\boldsymbol{w} =
\begin{bmatrix}
a \\
b
\end{bmatrix}
, \quad
\boldsymbol{y} =
\begin{bmatrix}
y_1 \\
\vdots \\
y_N
\end{bmatrix}
\end{align}
とします。式\eqref{eq:vecdef}と違って \boldsymbol{X} の2行目が 0 なのは、トロピカル乗法の単位元0 であることに依ります(任意の元  a にトロピカル乗法で  0 を掛けても  a、つまり、 a \otimes 0 = a + 0 = a だし  0 \otimes a = 0 + a = a が成り立つ)。したがって、連立方程式としては行列形式で
\begin{align}
\label{eq:tpprob}
\boldsymbol{X} \circledcirc \boldsymbol{w} = \boldsymbol{y}
\end{align}
と表すことができます。新たな記号  \circledcirc が出現しましたが、これはトロピカル版の行列積で*5、例えば、行列 A,B の積の  ij 要素は
\begin{align}
[\boldsymbol{A}\circledcirc\boldsymbol{B}]_{ij}=\oplus_{k=1}^N (a_{ik} \otimes b_{kj})=\max_k(a_{ik} + b_{kj})
\end{align}
と計算されます。これだけを見ると何だかよく分からない気もしますが、実は通常の行列積の計算方法の加法と乗法をトロピカル化しただけで、具体例で言えば、式\eqref{eq:tpprob}を計算すると、
\begin{align}
\boldsymbol{X} \circledcirc \boldsymbol{w} =
\begin{bmatrix}
x_1 & 0 \\
\vdots & \vdots \\
x_N & 0
\end{bmatrix}
\circledcirc
\begin{bmatrix}
a \\ b
\end{bmatrix}
=
\begin{bmatrix}
(x_1 \otimes a) \oplus b \\
\vdots \\
(x_N \otimes a) \oplus b
\end{bmatrix}
=
\begin{bmatrix}
y_1 \\
\vdots \\
y_N
\end{bmatrix}
= \boldsymbol{y}
\end{align}
のように式変形することができます。

本題に戻りまして、我々が何をしたかったかというと、トロピカル回帰係数  \boldsymbol{w} の推定でした。というわけで何か適当な \ell_p-ノルムで
\begin{align}
\|\boldsymbol{X} \circledcirc \boldsymbol{w} - \boldsymbol{y}\|_p
\end{align}
を最小化するような \boldsymbol{w} を計算すればよいわけです。


…と言いたいところですが、残念なことに、通常の線形回帰のようには計算できません。何故かというと、トロピカル半環には逆元が存在しないからです。どういうことかというと、a に何か足したら -\infty (=トロピカル演算におけるゼロ)になるような都合のいい -a みたいなものが無いということです。もしあるなら
\begin{align}
a \oplus (-a) = \max(a, -a) = -\infty
\end{align}
が成り立つはずですが、そんな -a はどうやら無さそうです。従って微分したり逆行列を定義することができません。解けません。さあ困りましたね。

拡張

今まで \mathbb{R}\cup\{-\infty\} に対する加法( \oplus:=\max)と乗法( \otimes:=+)のMax-plus演算を考えてきたわけですが、逆元がないなら逆元っぽいのを作ってしまえばよいわけです。

Max-plus代数は、実数に無限小を加えた集合 \mathbb{R}\cup\{-\infty\} に対して、加法をmax関数、乗法を + (通常の加法)で定義した代数構造でした。また、加法零元は \epsilon=-\infty、乗法単位元e=0でした。まとめると、
\begin{align}
\mathbb{R}\cup\{-\infty\},\quad a \oplus b := \max(a,b), \quad a \otimes b := a + b, \quad \epsilon:=-\infty, \quad e:=0
\end{align}

ところで、\max と似ている関数がありますよね。そうですね、\min ですね。
Max-plus代数の集合を \mathbb{R}\cup\{\infty\} に、加法と加法零元を  \ominus := \min, \epsilon':=\infty に換え、乗法、乗法単位元はそのまま( \oslash := +, e':=0)にすると、Max-plusと同様*6の体系、Min-plus代数を構成することができます。まとめると、
\begin{align}
\mathbb{R}\cup\{\infty\},\quad a \ominus b := \min(a,b), \quad a \oslash b := a + b, \quad \epsilon':=\infty, \quad e':=0
\end{align}
です。

Max-plus代数とMin-minus代数を合体させることで、あたかも加減乗除が揃ったような体系を構築することができるのですが、これらを一体の体系として扱うにはもう少し工夫が必要になります。特に、今回逆元が無くて困ってたので、これを解決したい。というわけで、例えば、 \max_i(\cdot) \min_i(\cdot) を使って表すとどうなるでしょうか。 a,b\in\mathbb{R}\cup\{-\infty\} とすると、
\begin{align}
\max(a,b)=-\min(-a,-b)
\end{align}
が成り立ちます。マイナスを取る操作を  a^*(=-a) のように表記して、これを共役元ということにすると、
\begin{align}
a \oplus b=(a^* \ominus b^*)^*
\end{align}
と書き直せます。また、通常の加法に対して
\begin{align}
a+b = -( (-a)+(-b) )
\end{align}
なので
\begin{align}
a \otimes b=(a^* \oslash b^*)^*
\end{align}
が成り立ちます。 \infty^*=-\infty についても成り立ちます。

今回はMax-plus代数をベースに構築したので、Min-plus代数の方を「双対」なものとします。ここまでに出てきた要素を一覧にしたものが以下の表です。

項目 記号 意味
集合 \mathbb{R}\cup\{\pm\infty\}
加法 \oplus \max
零元 \epsilon -\infty
双対加法 \ominus \min
双対零元 \epsilon' \infty
乗法 \otimes  +
単位元 e  0
双対乗法 \oslash  -
双対単位元 e'  0
共役元 a^*  -a

最適解

ここまでくると、双対行列積(=Min-plus側の行列積)も定義することができまして、
\begin{align}
[\boldsymbol{A}\circledast\boldsymbol{B}]_{ij}:=\ominus_{k=1}^N (a_{ik} \oslash b_{kj}) = \min_k(a_{ik}+b_{kj})
\end{align}
と定義することにします。で、
\begin{align}
\boldsymbol{X} \circledcirc \boldsymbol{w} = \boldsymbol{y}
\end{align}
が解をもつなら、最大元 \hat{\boldsymbol{w}}
\begin{align}
\hat{\boldsymbol{w}}=\boldsymbol{X}^* \circledast \boldsymbol{y} = \left[\ominus_{i=1}^N(x_{ij}^* \oslash y_i)\right] = \left[\min_{i}(y_i - x_{ij})\right]
\end{align}
で計算することができるらしいです。イメージとしては擬逆行列 \boldsymbol{X}^* と思ってしまってもいいとは思いますが、厳密には、行列積 \circledcirc, \circledastガロア接続という関係にあることから導き出されます。

ガロア接続

2つの半順序集合  (A,\leq), (B,\leq) があったとします。
また、写像  F: A\to B, G:B\to A を単調増加写像*7とします。

このとき、任意の  a\in A b\in B に対し、
\begin{align}
F(a) \leq b \Leftrightarrow a \leq G(b)
\end{align}
が成り立つとすれば、これをガロア接続と呼びます。

ガロア接続には激ヤバ性質がありまして、 \forall b\in B, \{a \in A \mid F(a) \leq b\} の最大元は G(b) です*8

で、実は行列積 \circledcirc, \circledast は互いにガロア接続の関係にあるため*9、この性質を使えます。ここで、それぞれの作用を
\begin{align}
\delta(\boldsymbol{w}) & :=\boldsymbol{X}\circledcirc\boldsymbol{w} \\
\varepsilon(\boldsymbol{y}) & :=\boldsymbol{X}^* \circledast\boldsymbol{y}
\end{align}
と定義します。そうすると、 \delta(\boldsymbol{w}), \varepsilon(\boldsymbol{w})ガロア接続なので、
\begin{align}
\boldsymbol{X}\circledcirc\boldsymbol{w} = \delta(\boldsymbol{w}) \leq \boldsymbol{y} \Leftrightarrow \boldsymbol{w} \leq \varepsilon(\boldsymbol{y}) =\boldsymbol{X}^* \circledast\boldsymbol{y}
\end{align}
が成り立ちます。

GLE (greatest lower estimate)

 \|\boldsymbol{X}\circledcirc\boldsymbol{w} - \boldsymbol{y}\|_p を最小化しますが、 \boldsymbol{X}\circledcirc\boldsymbol{w} \leq \boldsymbol{y} としても状況は変わらないので、この仮定を入れます。先ほどの \delta, \varepsilonガロア接続なので、
\begin{align}
\boldsymbol{w} \leq \boldsymbol{X}^* \circledast\boldsymbol{y}
\end{align}
ですが、 \|\boldsymbol{X}\circledcirc\boldsymbol{w} - \boldsymbol{y}\|_p を小さくするには  \boldsymbol{X}\circledcirc\boldsymbol{w} \leq \boldsymbol{y} なので  \boldsymbol{X}\circledcirc\boldsymbol{w} をできるだけ大きめに取りたい。

というわけで、\boldsymbol{w} の最大元は\boldsymbol{X}^* \circledast\boldsymbol{y} で計算できるので、最小 \ell_p 誤差に関する最適値  \hat{\boldsymbol{w}} は、
\begin{align}
\hat{\boldsymbol{w}} =
\begin{bmatrix}
\hat{a} \\ \hat{b}
\end{bmatrix}
&= \boldsymbol{X}^* \circledast \boldsymbol{y} \\
&=
\begin{bmatrix}
-x_1 & \cdots & -x_N \\
0 & \cdots & 0
\end{bmatrix}
\circledast
\begin{bmatrix}
y_1 \\
\vdots \\
y_N
\end{bmatrix} \\
& =
\begin{bmatrix}
\min_i (y_i-x_i) \\
\min_i (y_i)
\end{bmatrix}
\end{align}
となります。幾何的には、データの下限にfitします。

MMAE (minimum max absolute error)

GLEによるトロピカル回帰ではデータの下限にfitしますが、もうちょいいい感じに回帰させたいわけですね。

じゃあどうするかということですが、最小  \ell_\infty 誤差の下でより良い近似解を得ます。 \boldsymbol{X} \circledcirc\boldsymbol{w}=\boldsymbol{y} の最大元  \hat{\boldsymbol{w}} に対する  \ell_\infty 誤差を
\begin{align}
\|\boldsymbol{X} \circledcirc \hat{\boldsymbol{w}} - \boldsymbol{y}\|_\infty=\|\boldsymbol{X} \circledcirc (\boldsymbol{X}^* \circledast \boldsymbol{y}) - \boldsymbol{y}\|_\infty
\end{align}
で評価できます。これは、GLE回帰直線と観測された  \boldsymbol{y}_i との差の中で最大のものを計算していることになります*10。これを  2\mu と置くと、
\begin{align}
\mu = \frac{1}{2}\|\boldsymbol{X}\circledcirc\hat{\boldsymbol{w}}-\boldsymbol{y}\|
\end{align}
は、GLE回帰直線からデータの中心線あたりまでの距離に相当します。この考え方をMMAE (minimum max absolute error)と呼び、MMAEによる回帰係数の推定値  \tilde{\boldsymbol{w}}
\begin{align}
\tilde{\boldsymbol{w}} &= \hat{\boldsymbol{w}} + \mu \\
&= \boldsymbol{X}^* \circledast \boldsymbol{y} + \mu
\end{align}
で計算されます。結局、トロピカル直線  y=(a \otimes x) \oplus b=\max(a+x, b) への単回帰であれば、
\begin{align}
\tilde{\boldsymbol{w}} =
\begin{bmatrix}
\tilde{a} \\ \tilde{b}
\end{bmatrix}
&= \boldsymbol{X}^* \circledast \boldsymbol{y} + \mu \\
&=
\begin{bmatrix}
-x_1 & \cdots & -x_N \\
0 & \cdots & 0
\end{bmatrix}
\circledast
\begin{bmatrix}
y_1 \\
\vdots \\
y_N
\end{bmatrix} + \mu \\
& =
\begin{bmatrix}
\min_i (y_i-x_i) + \mu \\
\min_i (y_i) + \mu
\end{bmatrix}
\end{align}
を計算すればよいわけです。

実際これで回帰を実行すると下の図のようになります。

通常の回帰直線(青)に対して、MMAEによるトロピカル回帰(緑)の方がよりデータにfitしていることがわかります。そういうデータを使ったので当然といえば当然ですが。

実装編へ続く

【理論編】ではトロピカル単回帰をどう実現するか、数学的観点から追っていきました。でもやっぱりこういうのは理論と実装の両輪が必要なんですよね。というわけで、実装や回帰結果の評価に関する具体的な話は【実装編】で述べます。

limnanthaceae.hatenablog.com

*1:P. Maragos, V. Charisopoulos and E. Theodosis, "Tropical Geometry and Machine Learning," in Proceedings of the IEEE, vol. 109, no. 5, pp. 728-755, May 2021, doi: 10.1109/JPROC.2021.3065238.

*2:ぶっちゃけトロピカルであることが何の役に立つのかはさっぱりわからない。

*3:小泉構文ではない

*4:加法をmin関数にした Min-plus代数というのもあり、これをトロピカル半環として定義する場合もあります。使用用途によって好きな方を定義すれば良いと思います。

*5:元論文では  \boxplus で表記されていますが、乗法なのに加法っぽい記号を使うのがなんか気持ち悪いので、本記事では  \circledcirc で表します。

*6:つまり、双対

*7:つまり、写像  F,G は順序を保存する。例えば、 a,a'\in A とすると F によって順序が保存されて  a\leq a' \Leftrightarrow F(a)\leq F(a') G も同様。

*8:Butkovic, Peter. “Max-linear Systems: Theory and Algorithms.” (2010).

*9:なんでそうなるかはよくわからなかった

*10: \ell_\infty ノルムを計算すると、 \|\boldsymbol{x}\|_\infty=\max(|x_1|,|x_2|\cdots,|x_n|) なので。

生殺与奪格の殺格用法に関する考察

この記事は語学・言語学・言語創作 Advent Calendar 2022の10日目です。
adventar.org

Q: 殺格ってなに?

A: 多分初出はこれ

殺格とは?

マニア向けの説明

「生格、与格、奪格があるんだから殺格を作れば生殺与奪が揃うね!」というジョーク。

まじめな説明

言語には「格」というものがありまして、名詞同士の関係性とか名詞の役割を表す文法概念が格です。
と書くと難しく感じますが、要するに日本語でいうと「~が」とか「~を」とかのことです。「ネコがネズミを食う」であれば、「が」が付いている「ネコ」は「食う」という動作の主体、「を」が付いている「ネズミ」は「食う」という動作の対象、といったような感じ。

例えば他にも、

  • 生格(属格):「~の」*1
  • 与格:「~に」
  • 奪格:「~から」

といった格があります。

ここにもし「殺格」を付け加えれば「生殺与奪」が完成しますね。「生殺与奪」って格を並べた言葉っぽくない?というのが冒頭のツイートです。
残念ながら「殺格」は自然言語には(多分)ないのですが、人工言語であれば文法規則なぞ自由に作れるので、殺格も作ってしまえ、ということです。

じゃあ殺格ってどんな役割を表すのだろか?ということを考えるのが今回の記事の主旨になります。
(ちょうど自言語にも取り入れようと思っていたので、言わばアイデアメモです。)

殺格の使い道

殺格の役割、殺格の用法について考えてみます。
「殺す・殺される」以外の殺格の用法を具体的に考案・拡充することは、特に人工言語における表現の豊かさを与える点で非常に重要な課題であり、実際、以下のツイートでは殺格用法の拡張案について言及されています。

以上のツイートや各言語の「殺す」の用法を踏まえると、殺格は概ね以下の役割を担わせることができるでしょう(という妄想)。

  • 殺害
  • 停止
  • 消失
  • 変化
  • 抑制
  • 放棄

以下、個別の用法ごとに例文を交えながら、殺格がどのように使われるか見てみましょう。

殺害の殺格

文字通り。対象が生物的な死を迎えることを表す。

例:「正当防衛のため、暴漢を刺した」
「暴漢」が殺格であった場合、暴漢は刺殺されたことまで含意する。

例:「ネコがネズミを食べた」
食った、ということは「ネズミ」は十中八九死んでいるので、殺格で表現されることでしょう。逆に例えばネズミがネコの胃の中で生きているなら殺格を使うべきではない。

停止の殺格

機能・役割を止めたり、機能不全に陥らせる。しかし一時的な機能停止なので、復活可能。

例:「明かりを消す」
電源をOFFにする系の文章で殺格が使えそう。

例:「箪笥が倒れている」
例えば引き出しが使えないなど、箪笥としての機能を一時的に喪失している状態。戻せば使える。
倒れた結果破壊されてしまった場合との区別は言語ごとに何か文法範疇作るか何かをするということだと思う。

消失の殺格

物や概念、香りなどを消す。物損や金銭的損失、名誉毀損なども。

例:「昨日何を食べたか忘れた」
食べたものの記憶、という概念の喪失。

例:「ろうそくを吹いて火を消す」
「火」という明らかに存在していたものが消失する。

例:「FXで有り金全部溶かした」
形になっていないものも含めて、財産の喪失は殺格の適用範囲だと思う。

変化の殺格

何らかの動作や経時的変化によって、機能や価値が失われる対象を表すような気がする。
これはポジティブな意味にも、ネガティブな意味にも両方使われる気がする。

例:「牛乳を常温で放置してたらそりゃあ腐るでしょう」
牛乳の牛乳としての役割の喪失。腐った牛乳は腐ってない牛乳とはその機能が一致しないはず。かつての牛乳ではないのである。

例:「興味本位で目覚まし時計を分解した」
分解された目覚まし時計のパーツの集合は時計ではない。構成要素が同じだとして、果たして時を刻むことがあるだろうか(反語)。

例:「オタマジャクシは成長するとカエルになる」
成長に伴って不可逆的に変化するときも、殺格が使えそう。カエルに成った時、オタマジャクシという存在は消える。

抑制の殺格

抑制、弱体化、中和など?完全に機能が無くならないにしても、弱まる場合に使えそう。停止とか消失とか変化とグラデーションだとは思うけど。

例:「迂闊な発言で若者のやる気を削ぐ」
気分も弱められる。

例:「熱を冷ます」
熱さが緩和する。ミクロには熱運動の抑制。

例:「売れない商品を値下げする」
商品価値の低下、弱化。

例:「塩酸を水酸化ナトリウムで中和する」
酸性が弱まったり、完全に無くなったりしうるという意味で。

放棄の殺格

捨てたり置き去りにする。存在が世界から無くなってはいないが、動作主の関心の外に行くようなとき?

例:「車の窓からゴミをポイ捨てするな」
捨てるという行為は、対象を自分の関心の外に追いやることになる。

例:「君をただ不幸にするだけのその考え方は捨てたほうがいい」
概念も同じく。

例:「カラスに襲われたので仕方なく昼飯を置いて逃げた」
置き去りにされる、残される、放棄されるものは殺格のカバー範囲でしょう。

例:「不採算事業を売却する」
当然この世に存在はし続けるが、動作主体視点では無き者にされる。

おまけ:殺格を持つ言語の例

自分が観測した中では、

  • オ゛ェジュルニョェーッ語
  • カタパイ語(自言語)

だけなのですが、もし他にあれば教えてください。

ちなみに、オ゛ェジュルニョェーッ語の殺格は「失わしめるものを表す格」で、生格「生み出すことを表す格」と対をなしています。オ゛ェジュルニョェーッ語では(多分)殺される方ではなく殺す方が殺格で表現されていて、(多分)使役的な意味になっているようです(間違ってたらご指摘ください)。

おまけ2:カタパイ語について

拙作の人工言語カタパイ語 (katapali katapayile)」では「生殺与奪格のみの言語が創れるだろうか?」をコンセプトに、殺格語法の拡充を試みております。

最後に

考えるのは自由。

*1:大体は「属格」と呼ばれますが、ロシア語はじめスラヴ語ではなぜか「生格」と呼ばれる。

楔形文字で学ばないアッカド語文法(12)名詞由来形容詞・指示語

この記事は

  • 名詞由来形容詞
  • 指示語(指示形容詞/照応代名詞)

についての記事です。

1. 名詞由来形容詞

名詞語幹に-īをつけることで「~に関連する」という意味の形容詞を作ることができます。現代日本語でいうところの、連体修飾格の「~の」のようなものでしょうか。

  • maḫrûm (< *maḫrīum):前方の(maḫrum:前方)
  • elûm (< *elīum):上方の(elum:上方)
  • šaplûm (< *šaplīum):下方の(šaplum:下方)

赤字で示したように、男性単数主格などでは語尾が-īumの並びになるので母音縮約が起こり-ûmと変化することに注意してください。また、例えば女性などになると間に-t-が入ったりして縮約が起きず-ītumとなったりするのでこれも注意。音韻変化については第11回を参照。
limnanthaceae.hatenablog.com

ちなみに、場所の名詞に-īをつけると「~人の」といったような意味の形容詞になります。

2 指示形容詞/照応代名詞

指示形容詞 annûm

指示形容詞「この」は、アッカド語では annûm (<*hanniyum) です。女性単数は annītum (<*hanniytum)。

他の形容詞を annûm で修飾することもできます。

šamnum ṭābum annûm
 この良質な油

šamnum 油脂
ṭābum 良い、素晴らしい

女性単数形annītumは指示代名詞「これ」としても使うことができます。

照応代名詞 šū

annûm「この」と対になる ullûm という語がありますが、古バビロニア語のテキストにはあんまり出てこないらしい。
その代わりに、「あの」を表現するには3人称代名詞 šū を使います。厳密には前方照応で「さっき話に出したあれ/これ」というニュアンスなので、訳としては「あの」も「この」もどちらもあり得ます。

alpam šuātu ana eṭlim iddin
 彼はあの(例の)牛を若者に与えた

なお、3人称代名詞には与格形が存在します。方言の違いによって幾つか異なる語形があり、uāšim, šâšim は男女ともに単数で使います。また、šâšum は男性単数、šiāšim は女性単数で使うことができます。男性複数は šunūšim。女性複数の方は立証されてはいませんが、šināšim と予想されています。

3 まとめ

  • 名詞→形容詞の派生は -ī-
  • annûm「この」、šū「あの」


←前:楔形文字で学ばないアッカド語文法(11)子音脱落・母音変化
→次:楔形文字で学ばないアッカド語文法(13)G語幹III型弱動詞

参考文献
  • J. Huehnergard, A Grammar of Akkadian (3rd ed. 2011), Harvard Semitic Museum Studies 45, ISBN 978-1-57506-922-7.
  • D. Snell, Enkonduko en la Akadan (Tria, reviziita eldono), esperantigita de Michael Wolf, Biblical Institute Press, Rome, 1988, ISBN: 88-7653-566-7.