# 自然言語処理 ## 2 20191009 文の構造 ref: [言葉の単位](https://www.kokugobunpou.com/%E6%96%87%E6%B3%95%E3%81%AE%E5%9F%BA%E7%A4%8E/%E8%A8%80%E8%91%89%E3%81%AE%E5%8D%98%E4%BD%8D/) - 日本語の文の構造 - 述語が一番大事 - 述語があれば文が通じる - 重要な情報は一番最後に置かれる - 英語の文の構造 - 主語と動詞が大事 - 文章は階層構造をなしている - **文(sentence)** - 句点(。)や?等で区切られたひと続きの言葉 - e.g.) 太郎は昨日借りた古い本を読みました。 - 節(clause) - 主語述語を持つもの - **句(phrase)** - 2つ以上の語が集まって1つの品詞と同じような働きをしながら, 「主語+動詞」の形式を備えていないもの - 修飾語を含めた全ての単語のまとまり - e.g.) 古い本(名詞句) an old book - **文節** - 文を読むときに区切っても不自然にならないような最小の単位 - e.g.) 太郎は|昨日|借りた|古い|本を|読みました。| - **単語(word)** - まとまった意味を持つ最小の単位 - e.g.) 太郎|は|昨日|借り|た|古い|本|を|読み|まし|た。| - 形態素 - 意味を持つ最小の単位 - 意味はあるが文法的に正しくない --- 単語の種類 ref: [単語の分類(1)自立語と付属語](https://www.kokugobunpou.com/%E6%96%87%E6%B3%95%E3%81%AE%E5%9F%BA%E7%A4%8E/%E5%8D%98%E8%AA%9E%E3%81%AE%E5%88%86%E9%A1%9E-1-%E8%87%AA%E7%AB%8B%E8%AA%9E%E3%81%A8%E4%BB%98%E5%B1%9E%E8%AA%9E/) - 自立語 - 内容語ともいう - 文節の最初に来る単語のこと - これ単体で文節をつくることができる - 動詞, 形容詞, 形容動詞, 名詞, 副詞, 連体詞, 接続詞, 感動詞 - e.g.) 太郎, 昨日, 借りた, 古い, 本, 読みました - 付属語 - 単独で文節を作れない - 自立語の後につく - 文法的な機能を表す単語 - 助詞, 助動詞 - e.g.) は, を - 前期は代数は不合格だった - 他の科目は合格だった - 代数は前期は不合格だった - 後期は合格だった --- 品詞(10種類) - [連体詞](https://prowriters.jp/grammar/pre-noun_adjectival) > 連体詞は、体言(名詞)を修飾して意味をくわしく説明する語です。 - e.g.) この, あらゆる, 大きな, わが, たいした - 形容詞, 形容動詞, 連体詞の見分け - 「~(ウ段音)」になるとき - 動詞 - e.g.) **読む**本, **歩く**人 - 「~い」になるとき - 形容詞 - e.g.) **大きい**犬, **青い**海 - 「~な」になるとき - 「~だ」に言い換えられるとき - 形容動詞 - e.g.) **静かな**場所, **豊かな**資源 - 「~だ」に言い換えられないとき - 連体詞 - e.g.) **大きな**犬, **おかしな**話 - その他 - 連体詞 - e.g.) **この**家, **あらゆる**方法 - 副詞と接続詞の違い - 文頭に来れるものが副詞, 急に文頭に来ると不自然になるものが接続詞 - e.g.) **つい**寝過ごしてしまった(副詞), **しかし**, 彼は来なかった(接続詞) ![](https://i.imgur.com/SzE7lG3.png) --- コーパス - 実際に書かれた言葉や話されたコドバを集めた大規模なコドバデータ ![](https://i.imgur.com/FQkSgf4.png) ## 3 機械学習 機械学習の種類 ![](https://i.imgur.com/OLv3SOv.png) ![](https://i.imgur.com/wYQJcnA.png) ![](https://i.imgur.com/RjYq8ru.png) ![](https://i.imgur.com/HF4sItX.png) ![](https://i.imgur.com/OOcJnAq.png) --- 分類器の評価 ![](https://i.imgur.com/rSA2ANj.png) ![](https://i.imgur.com/FAX3wC6.png) ![](https://i.imgur.com/VQ4B4Fb.png) ![](https://i.imgur.com/bwqi4Wm.png) ![](https://i.imgur.com/3wgjsdc.png) ![](https://i.imgur.com/Mmi4M72.png) --- 適合率, 再現率, F値について - 精度(適合率): P=$\frac{TP}{TP+FP}$ - 正しいと出力されたうち, 本当に正しかったか割合 - 再現率: R=$\frac{TP}{TP+TN}$ - 本当に正しい答えのうち, 正しいと出力された割合 - F値: F=$\frac{2*P*R}{P+R}$ - 悪い方に引っ張られる平均(調和平均) - Accuracy = $\frac{TP+FN}{TP+TN+FP+FN}$ - モデルの作り方は「学習」にあたる ||正例(出力)|負例(出力)| |:-:|:-:|:-:| |正例(正解)|True Positive(TP)|True Negative(TN)| |負例(正解)|False Positive(FP)|False Negative(FN)| ## 4(形態素解析) 形態素解析の役割 - 文章にどのような単語が含まれているかを解析すること - 分かち書き処理 - 単語ごとに分割する処理 - ひらがな読みへの変換 - 音声合成の前処理 - かな漢字変換 --- 解析グラフ(lattice) - 辞書からコストなしの解析グラフを作ること - 文頭と文末を書くこと TODO: lattice --- 接続コスト最小法 - 単語コストと接続コストがある - コストありの解析グラフを作る感じ - Viterbiアルゴリズム - latticeアルゴリズムにコストを付与するだけ TODO: viterbi2つ ## 5(形態素解析) ![](https://i.imgur.com/rMdKEap.png) ![](https://i.imgur.com/9vdKzZd.png) ![](https://i.imgur.com/hZWGQPi.png) ![](https://i.imgur.com/sEql1V4.png) ## 6(構文解析) ![](https://i.imgur.com/wwn88Sz.png) --- 使用する専門用語 ref: [【形式言語】文脈自由文法を例題を用いて丁寧に解説](https://www.virtualinvader.com/context-free-grammar-exam/) - 生成規則(Production Rule) - a $\rightarrow$ bと書き換え可能といった規則 - e.g.) 数値 $\rightarrow$ 0 | 1 | 2 | 3 | ... | 9 - 終端記号(Terminal Symbol) - それ以上置き換え不可能な記号 - e.g.) 0, 1,2,3,..., 9 - 非終端記号(Non-Terminal Symbol) - 置き換え可能な記号 - e.g.) 数値 - 開始記号(Start Symbol) - 書き換えを開始する最初の終端記号 - 全ての記号を内包するもの - 文法(Grammer) - 今までの記号の頭文字をとった, 有限集合N, T, P, Sをまとめたもの - G = (N, T, P, S)と表記する --- 文脈自由文法 - 1単語を構文として書き換える文法規則 - 生成規則の左辺が1字のみである文法 - e.g.) 数値 $\rightarrow$ 0 | 1 | 2 | 3 | ... | 9 --- 構文木 ![](https://i.imgur.com/Sx2cyVw.png) ![](https://i.imgur.com/eamvszN.png) ![](https://i.imgur.com/TOkeDb5.png) ![](https://i.imgur.com/YleUY0y.png) --- 上向き構文解析 - CYK法 - 与えられた文字列から出発して, 構文木を下から上に作っていく手法 ![](https://i.imgur.com/DLQnYDb.png) TODO: CYK法 --- 下向き構文解析 - Early法 - 木の根(開始記号)から出発して, 構文木を上から下に作っていく手法 ## 7(構文解析): 係り受け解析 ![](https://i.imgur.com/MXgLlpc.png) ![](https://i.imgur.com/kKJcZV9.png) ![](https://i.imgur.com/TT8P77Q.png) --- 係り受け木 - 右端の文節を根とする木 - 句構造木と異なり, 文の語順が変わっても木の形が変わらない - 語順の自由度が高い構文構造表現に適している ![](https://i.imgur.com/XuGIfW0.png) ![](https://i.imgur.com/ajGYcfR.png) --- 例 - 黒い目の大きな猫 - 黒い/目の/大きな/猫 - 黒い目の大きな猫 - 黒目が大きい - 黒い目の猫 & 大きな猫 - 目が黒い & 大きい猫 - 黒い猫 & 目の大きな猫 - 黒い & 目が大きい # 第8回(意味解析) 意味解析(semantic analysis) - 構文解析で得られた構文構造を基に分の意味内容を表す意味構造を求めること - 文中の単語の意味を特定 - 文中の単語間の意味的関係を特定 --- - 意味構造 - Verb:borrowからagent:taro, object:book, place:libraryに対して有向グラフが伸びている --- - 述語論理による意味表現 - 太郎は本を借りた - 本を借りたtaroがいるという話 - $\exists x (book(x) \land borrow(taro, x))$ - 犬が吠える - 吠える犬がいるという話 - $\exists x (dog(x) \land bark(x))$ - 犬は吠える - 犬は一般的に吠えるものだと考えられている - $\forall x (dog(x) \Rightarrow bark(x))$ --- - 単語の意味を捉える方法 - 単語の定義文を調べる - 用例を調べる - 他の単語との関連の記述 - これがhot - シソーラス概念体系 --- 表現(単語)と意味(概念) ![](https://i.imgur.com/TyfLmyL.png) - 単語は具体的な単語 - 少女 - 女の子 - 娘 - 意味は単語が指し示す概念 - girl - daughter --- 単語(または単語が表す概念)の体系化 - シソーラス - 単語の意味的関係(同義語, 上位語, 下位語など)に基づいて分類, 整理したもの - 類語辞書 - 概念体系 - 単語が表しうる意味(概念)を主に, 上位, 下位関係(一般, 特殊)関係に基づいて分類, 整理したもの --- 共起辞書(EDRなど) - ある単語(または概念)と一緒に使われる単語(概念)のリスト - ある単語に共起した単語の辞書 --- シソーラス(または概念体系)の応用例 - 単語(概念)間の意味的類似度 - LCSは2単語が合流するノードのdepth - 犬とワープロであれば, 具体物で合流するので, depth(LCS)は0になる --- 単語の分散表現 - one-hot表現(0/1表現) - 10万次元の入力層がある場合に, ある特定の部分にのみ1, それ以外に0を入れる - 中間層は少なめ(100-500)? - 出力層は単語を出力する必要があるため, 入力層と同じ量のノード数にする --- ベクトル間の類似度 - 単語->ベクトルに変換 - ベクトルの類似度は$cos\theta$を両ベクトルの類似度とする - 1が非常に関係がある, 0が全く関係ない - cosの求め方 - 2つのベクトルの内積 ## 9(意味解析) 格 - 述語に対して他の単語が果たす役割 - 文法的, 意味的役割を果たすもの --- 格文法 - 単語間の意味的関係を述語を中心に捉えること --- 表層格と深層格 ref: [格メモ](https://jetbead.hatenablog.com/entry/20140110/1389287928) - 表層格 - 構文的な手がかり(日本語は格助詞, 英語は語順)から決まる構文的な役割 - 深層格 - 表層格に応じて意味を持つもの(?) - 述語に対する意味的な役割 - 「箸で食べる」の表層格は「~で」格で, 「箸」の深層格が道具格になるというような感じ --- 格フレーム - e.g.) 「述語:食べる 格:ヒト+が格、モノ+を格」のような感じの情報 ![](https://i.imgur.com/1hIAq4B.png) --- 語義曖昧性解消 - 単語の概念を1つに絞り込むこと - 単語の最も代表的な用法を選ぶ処理手法 --- 意味的役割付与 - 深層格を求めること - 表層格と深層格の対応表を作っておくことで, 表層格から深層格を求める手法 # 10 索引語(index term) - 文書の内容を表す単語のこと - 一般的すぎる単語やどの文書にも均質に現れる語は索引語に選ばれない - 索引語を選択するための尺度として以下の2つがあげられる - 1. 索引語の頻度(tf: term frequency) - 2. 索引語の分布の方より(idf: inverse document frequency) --- tf(term frequency) - 索引語の頻度 - tf(t, d) - 文書dに単語tが出現する頻度 - 文書の長さに依存しないように頻度を正規化する(文書の総単語数で割る)こともある --- idf(inverse document frequency) - 索引語の分布の偏り - df(document frequency) - ある文書集合の中で, 単語tが出現する文書の数 - idf(t) = $log \frac{N}{df(t)}$ - Nは文書の総数 - 文書集合において特定の文書に偏って現れる単語は, それらの文書の特徴づけに有効である --- 検索質問 - 検索単語の組み合わせのこと - ブール式 - AND, OR, NOTで結合した式 - e.g.) 「(銀座 OR 丸の内) AND レストラン AND (NOT イタリアン)」 - 単語の重み付け - e.g.) 丸の内よりも銀座のほうが望ましい - 文 - 入力分を形態素解析して単語を抽出 - e.g.) 銀座か丸の内にあるおいしいレストラン --- ブーリアンモデル - 文書を単語の集合として表現しておき(文書と単語の関係を転置しておく), ブール式で与えられる検索質問に対して, その条件を満たす文書を全て出力するモデル - 転置してあるので, 単語から文書を検索可能 --- 転置索引 - 索引単語から出現文書リストが得られる索引 - 行列のように, 行と列を転置した索引のこと - 普通は, 文書の中にどの単語が含まれていたかを持つので, その対応関係を転置した感じ - ref: [第3回 転置索引とは何か?](https://gihyo.jp/dev/serial/01/search-engine/0003) --- ベクトル空間モデル - 文書, 検索質問の両方を重み付き単語集合(単語ベクトル)として表現し, 検索質問とベクトルとしての類似度が高い文書から順に出力するモデル - --- コサイン類似度 ![](https://i.imgur.com/6MpFj4y.png) ![](https://i.imgur.com/3ham8bE.png) ![](https://i.imgur.com/w4FHBlA.png) ![](https://i.imgur.com/ipFi3hk.png) --- 再現率, 適合率, F値 - [詳しくはここで](#3-機械学習) ![](https://i.imgur.com/oLhhE4L.png) ![](https://i.imgur.com/ppU21PJ.png) ## 11(文書分類) 文書分類 - 文書をその内容に基づいて, 複数のカテゴリのいずれかに分類する技術 - カテゴリの数と種類は事前に決めておく - 文書分類とクラスタリングの違い - 文書分類は教師あり - クラスタリングは教師なし ![](https://i.imgur.com/oWF0Lnb.png) --- 評判分析(Sentiment Analysis) - ポジネガ分析もこれの一種 ![](https://i.imgur.com/Su6Spxg.png) # 12(機械翻訳) - 単語変換方式 l - 構文トランスファ方式 - 形態素列を構文構造にまで解析してから変換する - 意味トランスファ方式 - 形態素列を構文構造, 意味構造にまで解析してから変換する - 中間言語方式 - 中間言語を噛ませることで意味内容を落とし込みんでデコードする - 意味トランスファで中間言語を噛ませない場合は, Nか国語に対して$N(N-1)$種類の変換規則が必h要になる --- トランスファ方式 - 元言語の途中の構造(意味構造, 構文構造)から, 目標言語の構造(意味構造, 構文構造)に変換(transfer)する方式 - メリット - 構文の似ている言語間の翻訳に適している - e.g.) 英語と中国語 - デメリット - 言語構文が大きく異なる場合の翻訳では, 各構造などの意味的用をも考慮する必要がある点 - e.g.) 英語と日本語 --- 中間言語方式(pivot方式) - 意味解析まで行って中間言語に変換してから, さらに目標言語に変換する方式 - メリット - 多言語の相互翻訳を目指す際に, 必要な変換モジュールの数がトランスファ方式に比べて少なくなること - デメリット - 深い解析や曖昧性解消が必要で, ここの実装が大変なこと - 十分な表現力を持つ中間言語の設計が困難であること --- 用例に基づく翻訳 - 似た翻訳例にちょい修正を加えて出力する翻訳方式 - 用意した[対訳コーパス](#2-20191009)の中から入力分に最も類似した文を選び, その分に対応する目標言語の文を修正したうえで翻訳結果として出力する方式 - 一種の類推とみなせる --- 統計的機械翻訳 ref: [統計的機械翻訳](https://www.stat.go.jp/koukou/trivia/careers/career12.html) - 大体似てる感じの目標言語の文を見つけて, 並び替えによって目標言語の文を出力する方法 - 大規模な対訳コーパスを統計的に分析することで, 原言語の文Sと目標言語の文Tが翻訳関係にある確率を推測する確率モデルを作る - 原言語の文Sの上で, 目標言語の文Tが成立する際の事後確率(条件付確率)である$P(T|S)$を見つけよ, という問題を解くことで, 解が得られる --- 翻訳モデル - 2言語の文章において, それぞれどの文章同士が意味的に対応する可能性が高いかをモデル化したもの - 目標言語の文Tに対応する原言語の文がSである確率$P(S|T)$ --- 言語モデル - 原文に対応すると考えられる単語が訳語として自然かどうかをモデル化したもの - 目標言語の文Tが生起する確率$P(T)$ --- ニューラルネットワーク - 出力を教師信号と比較して誤差が小さくなるようにリンクの重みを更新していくことで学習する --- 再帰的ニューラルネットワーク - ref: [再帰型ニューラルネットワークの「基礎の基礎」を理解する ~ディープラーニング入門|第3回](https://www.imagazine.co.jp/%E5%86%8D%E5%B8%B0%E5%9E%8B%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E3%80%8C%E5%9F%BA%E7%A4%8E%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%80%8D/) - 時刻ごとに可変長の系列データを順次受け取って最終的な出力を得るもの - 時刻$x_t$の入力として, 過去の時刻$x_{t-1}$のデータも受け取る - 文章の最初の単語に対する重みは, 文末に行くにつれ意味が消失してしまう問題(勾配消失問題)があるため, 記憶セル内蔵のユニットを使う事で対策する --- ニューラルネットによる翻訳 - 元の文の特徴量を得るためのEncoderと, 特徴量から翻訳文を得るDecoderで構成される ![](https://i.imgur.com/zDhdRso.png) ## 13(対話システム) 対話システム - ユーザによる一連の自然言語処理を「理解」して, 「適切に」応答するシステム - 特に音声でやりとりするものを**音声対話システム**という --- 対話の目的 - 望ましいのはこれらの両方に対応できる対話システムである - タスク指向型対話 - ユーザが何らかのタスクを進行する目的をもち, システムもその目的のためのサービスを提供するもの - e.g.) 情報検索, 情報伝達(予約)など - 雑談 - 目的がはっきりと決まっていない対話 --- 対話の主導権 - システム主導 - システム側がグイグイ来る感じ - ユーザ主導 - ユーザがグイグイ行く感じ - 混合主導 - どっちも対応してる感じ --- 対話の形式・順序 - 対話で参照される情報形式 - 関係DB - フレーム・意味ネットワーク等の知識表現 - 自然言語テキスト - 対話の順序 - **ここ良くわからん** - 必須項目のやり取り中心 - 任意項目が多い場合 - 項目立てが出来ない場合 --- 対話のモード ![](https://i.imgur.com/euQjrfO.png) ## '15 & '17 1,2 ![](https://i.imgur.com/Oo8YRUQ.jpg) 3 (C) 機械翻訳におけるトランスファ方式と中間言語方式の長所と短所 トランスファ方式の長所は英語と中国語のような構文の似ている言語間の翻訳に適している点で, 短所は日本語と英語のように言語構文が大きく異なる場合の翻訳では, 各構造などの意味的要素も考慮する必要がある点。中間言語方式の長所は多言語の相互翻訳を行う際に, 必要な変換モジュールの数がトランスファ方式と比較して少なくなる点で, 短所は, 深い解析や曖昧性解消が必要で実装が大変である点。 (D) 対話システムの役割と備えるべき機能 対話システムの役割は, ユーザの入力を理解して適切に応答することである。備えるべき機能は, タスク志向型対話や雑談といった対話の目的に適応する能力, システム主導およびユーザ主導, またはその両方の対話の主導権を意識した実装, 意味ネットワークや自然言語テキストといった, 対話で参照される情報形式, 対話の順序を意識した実装, タイプ入力や音声入力といった対話のモードである。