人間のあるべき姿の探索

思索・人形・エンジニアリング

人間の言語生成に関する興味

人間が音声対話やチャットのような実時間の対話環境で文章を生成する際,厳密な文法チェックは行われず,しばしば非文を生成する.このことに関して,仮説を持っているので検証したい気持ちがある*1

ここ最近ではTwitterbotでそれなりに自然な文章が生成されているが,典型的に使われているマルコフ連鎖では,1単語前までの単語から一番それらしい単語を生成している.例えば,一つ前の単語から最も生成される確率が高い単語を選ぶ操作はmax(p(w_t|w_{t-1}))であり,これを拡張することで\begin{align} max ( p ( w_t | w_{t-1}, …, w_{t-k} ) ) , s.t. 0 < k < t-1 \end{align}となる.正確な定義である自信はないが,ひとまずこれを言語モデルと呼ぶ.

まず,この問題の定式化を行い,次に仮説を述べる.前提には仮説に直接関係しないものがあるが,このプロセスを追うことで問題がどのような特徴を持つかの参考になると考え,記載した.

前提

前提1:言語はWは時刻tを用いて以下の式で表される.

\begin{align} W = [w_1, w_2, …, w_k, …, w_t] \end{align}

\begin{align} s.t. 0 < k < t \end{align}

前提2:二つの単語間での文法チェックは以下のcheck関数を導入することで満たされる.ただし,この関数の中身には立ち入らない.

\begin{align} check(w_k, w_l) \end{align}

\begin{align} s.t. 0 < k < t, k < l <= t \end{align}

前提3:三つ以上の単語間の文法チェックは以下の変換を再帰的に用いることで,同様にcheck関数によって達成される.

\begin{align} w_k^{new} = [w_k, w_l] \end{align}

これで文節を新しく単語として扱うことで,同様に文節ごとの合成を可能にする*2

 前提4:人間は係り受けにおいて,単語間の距離が大きいほど処理能力に時間がかかる.

\begin{align} processing\_time \~ dist(w_t, w_t-k) := k \end{align}

I bought a hat yesterdayの例では,boughtとyesterdayの距離は3である.ナイーブな仮定を置くと,距離distの増加に対してprocessing_timeは比例する,比例でなくとも,単調増加であると考える*3

仮説

仮説:長距離の係り受けを使用すると非文になる確率が高いのではないか.

まず,実時間で文章を生成する為には,時間制約の中で文法的に正しい文章を生成する必要があり,ここでトレードオフが生じると考える.というのも.より時間制約が厳しくなるほど文法的な正しさを保証する余裕がなくなり,そのまま文を出力するか,時間制約を破って,相手に待ってもらうなどして文章を推考するかする必要がある.

ここで,長距離の係り受けは処理に負担をかける為,時間を固定した場合には非文になる確率が高くなると考えた.

 

さらに,人間の文章における重要度の重み付けに関して,以下のような構造を考えてみる.

\begin{align} Imp = \sum_{k=1}^t \gamma_k w_k \end{align}

\begin{align} 0 <= \gamma_k <= 1 \end{align}

つまり,各単語w_kに対してその単語をどの程度重視するかといったことを表す. \gamma_k = 0の単語w_kは全く考慮されない.n単語を同程度に考慮するモデルでは,

\begin{align} \gamma_k = 1 \quad if \quad  k > t-n-1, \quad else\quad  \gamma_k = 0 \end{align}

となる.

 

ここで,人間の場合では,基本的にはより過去の情報を参照すると処理負荷が増える為,重み\gammaが以下の条件で決定されると効率が良くなると考える.つまり,

 \gamma_k \gt  \gamma_{k-1}

といった風により直近の単語により大きな重みをつける.

長距離の係り受けでは,このルールに違反する為,処理負荷が増え,時間的なトレードオフの関係で非文がより生成されやすくなるのではないか,と考える.

終わりに

こういう研究どこかにありそうなので,探した方が良いのかもしれない.

 

*1:誰かやっているのかな…やってなければやってほしい

*2:*ここで,単語の合成は構文木に従わない場合を含む.というのも,構文木は文字列Wにおいて,連続した二つの文字列w_k, w_{k+1}のみを結合する操作w_k^{new} = [w_k, w_{k+1}]である.例えば,I bought a hat yesterday.において,[I bought]及び[yesterday]を結合する際,この二つの単語は隣り合っていない為一度の操作によって変換することは不可能である(この例では再起的に複数繰り返すことで,[[i, bought], [a, hat]], [yesterday]]と表現可能だが…)

文章がより複雑になった,実際にはこういった長距離の単語及び文節間の特徴をとらえる必要がある為,この一般化を行った.

*3:これは2単語間の話で,3単語以上でそれぞれの和として扱えるかどうかなどは複雑であり,想定し切れていない