DNET_NLPAI - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
-
戻る(言語処理)
(要素技術 > 非構造化データ処理 / 人工知能(AI)、
データ分析 > 非構造化データ処理、
深層学習(deep learning))-
言語処理(AI)
-
言語処理 ≒ 自然言語処理は、AI(機械学習・深層学習)最大の金脈と言われる。
- 以前は、形態素解析、構文解析、意味解析、文脈解析
(言語処理の該当節を参照)(言語学的) - 単語を高次元のベクトルに置き換える分散表現という技術を用いる。
- 単語の数が多いためデータが高次元かつスパース
- 単語データの並びのことをシーケンスと言い、これが文章にあたる。
- 歴史は機械翻訳の歴史
- まだまだ未熟な分野
- AI完全問題と言われる
- MMIとしては非常に魅力的
- 自然言語処理では目的と学習にズレがあることが多い。
- ズレている気がするタスクで学習するが目的のタスクを達成できる的な。
RNN は 再帰型ニューラルネットワーク(RNN)を参照。
自然言語処理に革命を起こしたRNN LM。
-
深層学習以降は、RNNを言語モデル(LM)に適用し、
次の単語を予測する。 - 特に主要な問題として過生成と生成不足が指摘されている。
- 音声データ ―①→ 文章候補 ―②→ 文書(Rescoring N-Best)で
性能を大きく改善したのが始め。- PPL : 迷い度、1/x の確率で正解できる
- WLR : 誤認識率(音声段階の間違いを含む)
| - | 言語学的に工夫したLM | RNN LM | 備考 |
|---|---|---|---|
| PPL | 221 | 121 | 単語予測ではこんなモノ |
| WLR | 13.5( - 9.5 = 4.0) | 11.1( - 9.5 = 1.6) | 9.5%は音声認識①側のエラー |
-
初期のモデルの構造
-
RNNはSimple RNN(再帰型ニューラルネットワーク(RNN)の該当節を参照)
-
inputは単語でOne-Hotエンコーディングしたベクトル。
(単語の数だけになるので数万から数十万次元になる) -
ht ≠ yt で、
- hidden の htは数十から数百次元のベクトル
- output の ytはinputと同じ数万から数十万次元のベクトル
-
(特徴抽出とタグ推定)
括弧、カンマ、ピリオドの削除
形態素解析、小文字などに統一するなど
英語のa, the, of、日本語の「は」「の」「です」など。
-
概要
入力された文字列を理解、推論、また学習して、効率的に変換を行なう。 -
事例
- かな漢字変換
- 予測変換機能
-
お客様の声の分析
口語調は処理が難しい- 略語や言葉の間違い
- 口語調の言い回し
- 顔文字の調整
-
口コミサイトの文章からの知識発見
- 口コミサイトの評価点が当てにならない。
- 話題(評価項目)の頻度でカテゴリが解ってくる。
- カテゴリ毎に評価項目のポジティブ・ネガティブを集計
-
コールセンターのコンタクト履歴からの知識発見
- 問い合わせの増加内容の分析
- 共起による製品の問題の分析
- 問い合わせパターンの分析
-
アナリスト・レポート分析(株価分析)
-
輸出産業のデータベース化
- レポートのキーワードを抽出(円高・円安)
- レポートの属性情報を付与
(誰が書いたか?上がる予測か?下がる予測か?) - 上がるか下がるか属性で分類して実際の株価の推移と比較して集計した結果
アナリストのレポートを分析すれば、おおむね株価の予測できる事が解った。
・東証一部:正解値を出している。
・中企業:まぁまぁ当たり、上げ下げの幅が大きい(賭博性が強い)
・小企業:正解値を出していない。
-
銀行・金融業のデータベース化
アナリストレポートはあまり当たらない事が解った。
-
-
行政文書の分析(政策計画書の玉虫色表現)
-
曖昧な動詞をつかっている計画の成功率は低い。
「やる」にどの様な表現を使っているか?
(行う、図る、実施する、整備する, etc.)- 動詞の曖昧性や明確性を定義する。
- どの程度成功しているのかの成功率で並べる。
- 明確な動詞は成功率が高く、曖昧な動詞では成功率が低い。
-
「等」をつかっている計画の成功率は低い。
等の出現率と成功率を表でまとめる。
-
-
後払い通信販売の未払い検知
- 未払い実績があると特定されたくない≒住所を偽る。
- 住所をゆらして記入してきた場合、未払いになる可能性が高い。
テキスト・アノテーション
- エンティティ・アノテーション(情報ユニットに分解し、構造化)
- エンティティ・リンキング(エンティティアノテーション後、KBに結び付ける)
- 文節チャンキング(名詞や動詞、形容詞といった品詞にタグ付けを行う)
- 意図抽出(質問・要望などの情報をテキストから抽出)
- 意味的(セマンティック)アノテーション(文脈から判断できる情報の付加)
- 分類アノテーション(分類もアノテーション)
- センチメント・アノテーション(感情分析)
(質問応答システム)
質問を特徴量に変換しパターン化された応答を提示する。
- プリセールス
- コールセンター
- スマートスピーカー
- バーチャルアシスタント
- テキスト要約
- 文書作成支援(文章校正)
自然言語の文章を構造化し大規模に集積したもの。
-
定義
- 機械可読なテキスト・データを収集したもの。
- ある目的のため
(現実の分布を考慮しサンプリングした)
テキスト・データを収集したもの。
-
分類
-
生コーパス
自己教師あり学習(機械学習の該当節を参照)における情報源 -
注釈付きコーパス
人手 or 機械的にアノテーションが付与されたテキスト・データ- 教師あり学習の学習データ
- 伝統的NLPシステムの評価データ
-
- エンコード、エンコーディングとも言う。
- 分布仮説から分散(意味)表現とも言う。
-
初期のRNN LMなどで、単語に意味付けしない場合は、
単語でOne-Hotエンコーディングしたベクトルを使用していた(高次元統計の問題)。 -
シソーラスによる手法
言語資源(辞書)を作成する。-
言語のクラス図のようなネットワークを作成
-
単語間の類似度の算出などができる。
-
最も有名なシソーラスはWordNet(NLTKライブラリ)
-
問題点
- 人手によって作成するので作成コストが高い
- 時代によって変化する意味を追うことが難しい。
- ニュアンスを表現できない(シチュエーション毎の使い分けができない)。
-
移行メモ(正誤): 元ページの「単語感の類似度」は「単語間の類似度」、
「意味を負うことが難しい」は「意味を追うことが難しい」の
誤変換と判断し修正した。
-
概要
- 文書中の単語を頻度と希少性を加味して評価
- 複数の文書に横断的に使用している単語は重要ではない
- 対象する文章内で頻度が高く出てくる単語は特徴的
- 単語埋込(Word Embedding)モデルではなく文書埋込(Text Embedding)
- 各単語のTF-IDFスコアを計算、文書内の全単語のTF-IDFスコアを
結合することで、文書全体を表すベクトルが得られる。 - TF-IDFは最終的には文書のベクトル化に使用される手法だが、
そのベースは単語ごとの重要度(重み)にある。
- 各単語のTF-IDFスコアを計算、文書内の全単語のTF-IDFスコアを
- 文書中の単語を頻度と希少性を加味して評価
-
用途
- 文書検索
- レコメンド
- 自然言語処理
文書の特徴をベクトル化
-
意味・定義
-
意味
文書と単語の「マッチ度」(頻度と希少性を加味して評価した値)を測定-
tf
文書中の単語の頻度
・文書中の単語の割合
・頻出単語 → 高ポイント -
idf
文書中の単語の希少性
・情報量(機械学習の理論の該当節を参照)(情報の珍しさ)
・希少単語(idf) → 高ポイント
-
-
定義
-
idf(t) = log (#D) / (#{d∈D|t∈d}) = log(全文書数)/(単語tを含む文書数)
- t : 単語
- d : 文章(単語の集合)
- #D : 全文章
- #d : 文章中の単語数
t∈d
d={t1, t2, ... tn}
tf-idf(t, d) = tf(t, d) * idf(t)
tf(t, d) = (#of t in d) / (#d) = (単語tの登場回数)/(文書dの単語数)
-
文書検索の例
Elasticsearchで使われているらしい。-
何を表示させるか?
- 単語をバラして検索単語が含まれていたら対象とする。
- → 頻出する単語では、どの文書も対象になる。
-
表示順序をどうするか?
- 単語が多く登場する。
- → 長文が有利になる。
-
-
概要
- tf-idfの進化系でtfの部分が進化している。
- 検索クエリに特化している。
-
用途
文書検索 -
意味・定義
-
意味
検索クエリに出てきた単語のスコアの合計。- 文章の長さが平均の場合、単語1で1ポイント
- 単調増加で最大スコアのk+1に漸近する。
- 罰則項で短い文書の方がスコアが高くなる。
-
定義
https://blog.foresta.me/posts/bm25-fomula/
https://qiita.com/KokiSakano/items/2a0f4c45caaa09cf1ab9
-
φ = score(q,d) = ∑ (idf(qi) * ((k1+1)f(qi,d)) / (f(qi,d) + k1(1−b+b(#d/avgdl))))
- 検索クエリ : q = {q1, q2, ...qn}
- idf : [tf-idf](#tf-idf)のidfと同じ。
- f(qi,d) : 文書中の当該検索ワードのカウント\
(的なモノ、tf説もあるが違うっぽい)
- k : パラメタ、1.2
- b : 文章の長さの罰則パラメタ、0.75
- φ : f=0で0、f=1で1、2≦fでφ<fで最大値のk1+1に漸近していく曲線
- avgdl : 単語数の平均
- (#d/avgdl) : 文書の相対的な長さ
- (1−b+b(#d/avgdl)) : 平均で0、文が平均より長いほど大きくなる罰則項。
φ = (k1+1)f / f+k1 ※ 文書の長さが平均(#d = avgdl)の場合
φ = (k1+1) * (f / f+k1) ※ 0 ≦ (f / f+k1) < 1なので φ < k1+1

移行メモ(正誤): 元ページの「検索クエリ : g = {g1, g2, ...gn}」は
式中の記号(q, qi)と整合しないため「q = {q1, q2, ...qn}」とした。
-
分布仮説:単語の意味は、周囲の単語によって形成
-
分散表現:単語の分散表現、単語埋込(Word Embedding)ベクトル表現
-
計算の効率化・精度の向上を図る。
-
局所表現・分散表現
- (局所表現:ベクトル=単語)
- 分散表現:ベクトル空間上の点=単語
-
単語にベクトルを割り当てる。
- 単語の数だけの次元からはるかに低い次元へと数学的な埋込が行われる。
- 類似する単語同士はベクトル空間上で近くなり、異なる単語同士は遠くなる。
-
-
ベクトル化のアプローチ
-
カウントベースの手法 > 共起頻度アプローチ
コーパスの共起関係を行列として表し行列分解の手法を適用。 -
推論ベースの手法 > 文脈予測アプローチ
コーパスの文脈から単語、単語から文脈を予測するような学習を行う。
-
-
問題点
-
多義語
- 同じ単語の複数の意味が1つのベクトルに混じる。
- 与えられた文脈における単語の分散表現を動的に作る。
-
反義語
- 反対の単語が似たベクトルになる。
- モダリティの情報を統合する研究。
-
コーパスの共起関係を行列として表し行列分解の手法を適用。
- 共起行列
- 縦軸:ベクトルを与えたい単語の集合
- 横軸:縦軸の単語の属性として用いる単語群
- 数字:n単語(文脈窓、周辺文脈)に何回出現するか?
| - | ... | 単語A | ... | 単語B | ... | 単語C |
|---|---|---|---|---|---|---|
| 単語X | ... | 10 | ... | 150 | ... | 50 |
| 単語Y | ... | 100 | ... | 80 | ... | 40 |
| 単語Z | ... | 1 | ... | 20 | ... | 100 |
- 例
I waited for a while.
| I | waited | for | a | while | . | |
|---|---|---|---|---|---|---|
| I | 0 | 1 | 0 | 0 | 0 | 0 |
| waited | 1 | 0 | 1 | 0 | 0 | 0 |
| for | 0 | 1 | 0 | 1 | 0 | 0 |
| a | 0 | 0 | 1 | 0 | 1 | 0 |
| while | 0 | 0 | 0 | 1 | 0 | 1 |
| . | 0 | 0 | 0 | 0 | 1 | 0 |
-
問題と対策
- 相互情報量(PMI)で正規化
単語と文脈語(the)など、重要で無いが共起し易い(不適切)- carと関係が深い単語はtheか?driveか?
- 1000単語中でcarが20、theが1000、driveが10
- carとの共起がtheが10、driveが5の場合
theのPMI:
- 相互情報量(PMI)で正規化
= log2 (10*10,000) / (1,000 * 20) ≒ 2.32
driveのPMI:
= log2 (5 * 10,000) / (10 * 20) ≒ 7.97
- PPMI(Positive PMI)はPMIの正の値
PPMI = max(0, PMI)
-
SVD(特異値分解)で低次元化
- SVDでスパース(疎)な大規模行列をデンス(密)な大規模行列に変換
- Uの先頭の次元が重要度が高いのでスライシングで切り捨てる。
- 𝑋=𝑈𝑆𝑉𝑇
・Sの中の特異値が小さいものは重要度が低い。
・小さい特異値を削除することでSの行方向と列方向を削減し、
・Uを列方向に削減したU'、Vを行方向に削減したV'が作成できる
-
LSA(潜在意味解析)で低次元化
- LSAはTruncated SVDとも言う、SVDを使った次元削減法
- 特異値の大きなものに限定して計算することで高速化する。
コーパスの文脈から単語、単語から文脈を予測するような学習を行う。
-
各単語はベクトルで構成され、意味、文法上の活用形など関係を学習する。
-
ベクトルの内積やコサイン類似度の計算で
意味的類似度・関連度を計量化できる(類似度・関連度は異なる)。 -
意味関係がベクトルの差分で表される(加法構成性)。
-
単語の意味合成(類推)がベクトルの加算により行える。
-
有名な例
・king - man + woman = queen
・queen - woman + man = king
-
-

- ちなみに、\
共起頻度アプローチの分散表現は、コサイン類似度などの類似性尺度を\
使用することが一般的だが、共起頻度は単語の意味的な関係性を\
捉えようとするが単語の意味的情報を含まないため、\
ベクトル同士を加算することで2つの単語の意味的な結合を得る様な\
加法構成性は持たない。
移行メモ(正誤): 元ページの「含まなたいめ」は「含まないため」の
誤記と判断し修正した。
-
2013年に登場した技術
-
文脈予測アプローチの代表例の
「単語埋込(Word Embedding)モデル」-
元は(数万から数十万次元とか)スパース(疎)な
単語のOne-Hotベクトル(V次元) - これを比較的低次元(300次元とか)のデンス(密)なベクトル(h次元)に変換する。
-
元は(数万から数十万次元とか)スパース(疎)な
-
自己教師あり学習(機械学習の該当節を参照)の
深層学習(2層のNN)により分散表現(ベクトル表現)を
獲得する代表的な手法。- 単語予測(分類)の2層DNNで分散表現(ベクトル表現)は重みとして学習される。
- 入力Iは単語数V中の単語でOne-HotエンコーディングしたV次元のベクトル
- このWiIの重みWiの各行(or 列)が各単語をV→hに次元圧縮した分散表現に
なっている。 - 単語予測(分類)DNNの性能は低くて(まともに機能しないレベルで)も
分散表現(ベクトル表現)が獲得できればOK。
| One-Hotベクトル | 分散表現 |
|---|---|
![]() |
![]() |
https://deepage.net/bigdata/machine_learning/2016/09/02/word2vec_power_of_word_vector.html

https://take-tech-engineer.com/zero-deep-learning/
- モデル
I have a big dream for future.

- CBOWモデル
文中の単語穴埋め問題タスクを解くモデル- データ:I have (a) → [big] ← (dream) for future
- 入力Iは単語のOne-Hotベクトルになっている。
- 入力Iは1文章中の単語のc個の前後(の=2c個)の単語で、
- 前後のc個の単語に囲まれた中心の単語を予測する。
- WiでV次元のOne-Hotベクトルをh次元に圧縮(全結合)して、
- 圧縮した後、ベクトルの平均を取る
(前後の圧縮後のベクトルを足して1/2cにする)。 - このh次元のコンテキスト・ベクトルをWoで再びV次元に復元(全結合)する。
- 入力が行ベクトルか列ベクトルかは資料によって任意
(Wの行と列が入れ替わる)。 - 復元したV次元のベクトルをSoftmax関数
(ニューラルネットワーク(推論)の該当節を参照)で分類。
※ この学習の結果、重みWi、Woの行 or 列ベクトルが
各単語を次元圧縮した加法構成性を獲得した分散表現になっている。
| org | 高速化 |
|---|---|
![]() |
![]() |
| https://www.takapy.work/entry/2019/01/06/203042 | https://take-tech-engineer.com/zero-deep-learning/ |
- Skip-gramモデル
単語から周辺の単語予測の問題タスクを解くモデル(CBOWの逆)- データ:I have [a] ← (big) → [dream] for future
- 入力Iは単語のOne-Hotベクトルになっている。
- 入力Iは1文章中の1単語で、
- c個の前後(の=2c個)の単語を予測する。
- WiでV次元のOne-Hotベクトルをh次元に圧縮(全結合)して、
- Woで再び、c個の前後(の=2c個)のV次元のベクトルに復元(全結合)。
- 入力が行ベクトルか列ベクトルかは資料によって任意
(Wの行と列が入れ替わる)。 - 復元したV次元のベクトルをSoftmax関数で分類。
※ Woが共用なので単語が同じなら前後は全部同じ答えになる
(が、Wiが学習で計算できれば、推論の結果はソレでも良い)。
※ この学習の結果、重みWi、Woの行 or 列ベクトルが
各単語を次元圧縮した加法構成性を獲得した分散表現になっている。

https://www.takapy.work/entry/2019/01/06/203042
-
高速化
- 行列計算の高速化(前述のCBOW高速化の①の部分)
- 行列の積の計算するレイヤ(MatMulレイヤ)から
行列の行を抽出するレイヤ(Embeddingレイヤ)へ
(厳密にはnp.dot, np.matmulは違うらしい)。 - ちなみに、Embeddingレイヤの逆伝播は前から伝えられるデータで
該当する行に加算で更新(データが重なって戻って来る場合にも対応可)
- 行列の積の計算するレイヤ(MatMulレイヤ)から
- 行列計算の高速化(前述のCBOW高速化の①の部分)
| MatMul | Embedding |
|---|---|
![]() |
![]() |
| https://take-tech-engineer.com/zero-deep-learning/ | https://qiita.com/jun40vn/items/04a9adc2857f2a403cab |
![]() |
![]() |
https://take-tech-engineer.com/zero-deep-learning/
-
損失関数(ニューラルネットワーク(学習)の該当節を参照)
高速化(前述のCBOW高速化の②の部分)-
高速化なしモデル
重すぎて動かない(単語数≒分類が多過ぎるため) -
hierarchical softmax
100万分類を100分類*3=300に落とし込む。
・300/100万≒3000倍以上の性能向上
・実際には2分類をlog2 V 回行う。 -
Negative Sampling
100万分類を[正例1, 負例10] (負例サンプリング)の2値分類に落とし込む。
・Softmax関数をSigmoid関数にして1つの正例のロジスティック回帰と
複数の負例のロジスティック回帰する。
・Woutから当該行を抜き出し(Embedding)て内積を計算(dot積)する
EmbeddingDotレイヤを使用している。
・下図を見ると「順伝播に教師データ必要じゃないか。」となるが、
学習で分散表現を獲得する訳で、実際に推論する訳ではないのでOKか。
-

https://take-tech-engineer.com/zero-deep-learning/
-
上記の学習手法の総称
-
6パターン(2 * 3 = 6)
- モデル(2種類)
- 損失関数高速化(2種類)
-
Gensimのデフォルトは、CBOW&Negative Samplingとのこと。
-

https://qiita.com/jun40vn/items/04a9adc2857f2a403cab
移行メモ: 元ページは「6パターン(2 * 3 = 6)」としながら
内訳が「モデル(2種類)」「損失関数高速化(2種類)」の 2 項目のみで、
損失関数高速化は本文では 3 種類(高速化なし / hierarchical softmax /
Negative Sampling)が挙げられている。ここでは元の記述をそのまま残した。
-
Wi、Woのどちらを使うか?
-
基本的にWiだが、Woや、WiとWoの平均を使うなどのケースもある。
-
CBOWのWo側のベクトルで加法構成性を説明するコンテンツもあるのでCBOWはWoも使う。
-
CBOWの重みWoの単語に対応したベクトルは
「中間層のコンテキスト(≒関連する意味を含む)ベクトル」との
内積の値を大きくする。
・内積は、二つのベクトルがどれだけ同じ方向を向いているかの指標になる。
・同じベクトルの内積は大きくなり(+1)、
反対のベクトルの内積は小さくなる(-1)。 -
この内積で、man、KingでHeを予測、woman、QueenでSheを予測できる。
・男を意味するベクトル同士の内積が大きくなる:
「He is a man.」「He is a King.」
・女を意味するベクトル同士の内積が大きくなる:
「She is a woman.」「She is a Queen.」 -
従って、Woの単語に対応したベクトルは加法構成性を獲得する。
V(He) - V(She) = V(man) - V(woman) = V(King) - V(Queen) -
特に、Skip-gramモデルでは、Wiの有効性が実証されているとのこと。
-
-
-
word2vecがベースの進化形で、Skip-gramモデル * Negative Sampling
-
発想
-
モデル
- 入力Iはワードと対応するサブワードが複数個
- Where
- <Where>
- <Wh, Whe, her, ere, re>
- WiIで列ベクトルに圧縮(全結合)
- ベクトルを足して
- Negative Samplingで分類(?)。
- 入力Iはワードと対応するサブワードが複数個
-
成果
-
意味の類推
- CBOW < fastText
- 複合語・合成語のあるドイツ語で大きく改善
-
文法理解
- 加法構成性:longer - long + tall = taller
- 格変化、活用の多いドイツ語・チェコ語で大きく改善
-
未知語に強い
kindness = kind + ness -
少データでOK
Wikipedia100%をCBOWで学習 < Wikipedia1%をfastTextで学習
-
- 単語埋込(Word Embedding)表現が可能な2層のLSTMを用いた言語モデル
- 文脈に応じた単語の意味を演算して表すことが可能
(Bag of Words)
単語の出現回数(学習は不要)で、
語順に依る意味の違いを表現しないが、
類似文書検索タスクでは十分精度が出る。
- 日本語は英語のように単語が空白で分かれていない場合、形態素解析
(言語処理の該当節を参照)で単語単位に分割 - 文章毎に各単語が何回出現したかを数え上げ、
長さが語彙数、値が出現回数となるベクトルにする。 - 出現回数そのものでなく、TF-IDFといった手法を用いて
単語の重みを調整する方法もある。
-
系列変換モデル
-
文を系列として文を見る(文の構成性)。
-
何らかのタスクのRNNやLSTM(いずれも ニューラルネットワークの
該当節を参照)に学習させる。- 翻訳タスク
- 自然言語推論タスク
-
副作用的に文の分散表現を獲得
-
転移(深層学習のテクニックの該当節を参照)可能性の問題がある。
-
-
2012年に登場した技術(word2vecの一年前)
-
従来手法の問題
- BOWモデル:語順に依る意味の違いを表現しない。
- Parse tree:文1つならOKだが文章になるとNG
-
word2vecのdoc版で、
-
Document(文書)をWord(単語)の集合として見て
文書間の類似度やベクトル計算などを実現できる。 -
モデルは以下の2つのモデルから構成されている。
-
PV-DM(Distributed Memory Model of Paragraph Vector)
文章中の次の単語予測のタスクを解くモデル
・データ:ドキュメントID+ドキュメント(単語列)
・word2vecのCBOWモデル的な2層のNN
・1層目では重みDI、WIでドキュメントID、
単語のOne-Hotベクトルを次元圧縮
・2層目の前に次元圧縮したドキュメントIDベクトルと単語ベクトルの
平均とを連結し
・それぞれ重みが分散表現を獲得する。
・WIの列ベクトルが単語の分散表現
・DIの列ベクトルが文の分散表現(フレーズ・ベクトル) -
PV-DBOW(Distributed Bag of Words version of Paragraph Vector)
文章中の単語予測のタスクを解くモデル
・データ:ドキュメントID+ドキュメント(単語列)
・word2vecのSkip-gramモデル的な2層のNN
・入力は単語ではなくドキュメントIDベクトルで重みDIで次元圧縮
・最終的にDIの列ベクトルが文の分散表現(フレーズ・ベクトル) -
PV-DM・PV-DBOW
・2つのフレーズ・ベクトルを縦に繋げる(400 + 400次元 = 800次元)。
・PV-DBOW単体では精度はそれほど良くないらしい(タスク的にも)。 -
gensimのデフォルトは、
・PV-DMとのこと(単体で精度十分のため)。
・PV-DMは「Nが大きいN-gram」だから精度が良い?
-
-
-
タスクと結果
-
感情分析
レビュー・コメント → フレーズ・ベクトル → レーティング- 短文
Stanford Sentiment Treebank(高低2択)
- 短文
-
| - | ErrorRate |
|---|---|
| 今までのBEST(?) | 14.6% |
| doc2vec | 12.2% |
- 長文\
Large Movie Review Dataset - Imdb dataset(★1-5)
| - | ErrorRate |
|---|---|
| BOW(長文なら使える) | 12.2% |
| 今までのBEST(ボルツマン・マシン) | 10.8% |
| doc2vec | 8.8% |
- 情報抽出
(多分、Googleの)同じ検索クエリの結果から2件、
異なる検索クエリの結果から1件抽出
→ フレーズ・ベクトル → レーティング(同じクエリで近く異なるクエリで遠い)
| - | ErrorRate |
|---|---|
| BOW(長文なら使える) | 5.7% |
| doc2vec | 3.8% |
自然言語処理(NLP)モデル
RNN Encoder-Decoder(Sequence-to-Sequence)の該当節を参照。
-
2014年に登場した技術で、Transformerの元ネタ
-
機械翻訳の分野で、
- 統計的機械翻訳(SMT)から
- ニューラル機械翻訳(NMT)への
過渡期。
-
翻訳にRNNの発展形のEnc-Dec、Seq2Seq
(再帰型ニューラルネットワーク(RNN)の該当節を参照)を使用する。 -
翻訳タスクの結果
- 英 → 仏
- The agreement on the European Economic Area was signed in August 1992.
- L'accord sur la zone économique européenne a été signé en août 1992.
- 精度(BLEU)
- 未知語無しで従来手法に勝利。
- 長文では単語数が増えても精度が落ちない事を確認。
- 英 → 仏
| モデル | 全語 | 未知語無し |
|---|---|---|
| 統計的機械翻訳(SMT) Moses | 33.3 | 35.6 |
| ニューラル機械翻訳(NMT) RNN encdec | 21.5 | 31.4 |
| ニューラル機械翻訳(NMT) RNN search | 28.5 | 36.2 |
テキスト生成系(Transformer系)の該当節を参照。
テキスト生成系(Transformer系)の該当節を参照。
-
Generative Pre-trained Transformer
-
2019年にGPT-2、2020年にGPT-3が発表
(中身は同じで、規模と学習データの量を大きくしたもの) -
悪用リスクのためOSS化されていない
(OpenAI へAPIの利用申請が必要) -
2022年11月にChatGPTが公開される。
テキスト生成系(Transformer系)の該当節を参照。
-
Bidirectional Encoder Representations from Transformers
-
2018年(10月)に論文によって提案されたTransformerを
発展させたモデル。 -
GPT-nを少し改変しているので、高性能で汎用性が高く応用し易い。
-
BERT学:内部で何が行われているか?
Transformerの上に構築された自然言語処理(NLP)モデル
- T5
- Switch
- Meena
GPTやBERTなどのマルチタスク自然言語処理モデルの
性能評価目的で開発された。
GPTやBERTなどがLLMに該当する。
-
べき乗則で次単語予測の性能が向上、汎化性能も向上。
-
ただし、GPT-4の辺りで頭打ちになった。
-
創発
- モデルを大規模化していくとある時点から急に解けるようになる現象
- 大規模言語モデル(LLM)の創発的な特性 ≒ コンテキスト内学習
-
仮説
-
サブネットワークの発掘
- 宝くじ仮説
- 平坦な最小解仮説
-
構成属性文法仮説
言葉の背後の構造(コンテキスト)を理解できるようになる。
-
テキスト生成系(Transformer系)の該当節を参照。
- 与えられたコンテキスト内で情報を学習し、その学習を元に出力を生成する。
- Zero-Shot学習とも呼ばれ、プロンプト(過去文脈)でパラメタ更新はしないが
Attention機構を変形して見方を変えると勾配降下法をシミュレーションしている。
-
学習するAIは基本的に逆問題的に学習する。
-
LLMは順問題の定義を言語的&確率的に学習できる。
-
ただし、
- この順問題の定義の学習は、あくまで言語的&確率的であって
- 学習で構築した論理をベースに質問に回答している訳ではない。
-
そもそも、
-
LLMは言葉の意味を理解しているのか?
-
人間がどのように言葉の意味を理解しているのか不明。
- 直感的に思考して会話するケース
- 言語から学習したモデルを使って論理的に思考して会話するケース
-
-
恐らく、人間とLLMの言語理解能力の間に大きな違いがある。
人間は言葉で表せる以上のことを知っている。
-
人間は言語化されないモデルを内包する(暗黙知)。
-
LLMでは明文化されない暗黙知部分を学習できない。
(いずれも 人工知能(AI)の該当節を参照)- フレーム問題
- 記号接地問題
- 身体性
- 知識獲得のボトルネック(期待はある)
-
言語的&確率的な学習で暗黙知を学習したように見える時もある。
サポート
- 翻訳・要約
- トレーニング
- カウンセリング
- コーチング
- 新たな発見(藤井聡太的な)
- 雛形生成
- シナリオ、脚本
- 作詞
- 契約書
プログラムを生成する。
人間が参照しきれないテキストから意図する情報を抽出
特に、音声インターフェースなど。
LLMとの対比で人間の言語理解能力を理解する。
誤った「解釈」が(存在しない)新事実を創出してしまう。
記憶の機能がなく、破滅的忘却で壊れる可能性がある。
- 人間と比べるとかなり効率が悪い(コストが高い)。
- ただし、繰り返し利用でコストは償却可能と言う考え。
コレはChatGPTなどのシステム・アプリの問題。
何を持って偽情報なのか?
コレは、≒ セキュリティ。
何を持って倫理・道徳なのか?
目的駆動学習(人間のフィードバックによる強化学習)でポリコレにフィットさせたりする。
Web検索で仕事が変化したように、LLMでも変化するものと考えられる。
-
コンテンツへのリンク - OSSコンソーシアム
https://www.osscons.jp/joho108j0-537- 深層学習についてのレポート(LLM編)
https://1drv.ms/p/s!Amfs5caPP9r5kAtLiKqOHge-zTzs - 機械学習・深層学習についてのNotebook
https://github.com/OpenTouryoProject/DxCommon/tree/master/Notebook/path
- 深層学習についてのレポート(LLM編)
-
単語と図で理解する自然言語処理(word2vec, RNN, LSTM)
-
Yosuke00さんの記事一覧 | Zenn
https://zenn.dev/yosuke00- Transformerアーキテクチャと自然言語処理の発展
https://zenn.dev/yosuke00/articles/ae21ccebf4e32a - BERTモデルとファインチューニング
https://zenn.dev/yosuke00/articles/9d9d405e164198 - Stanford NLP with Deep Learning Lecture
- 1のまとめ:https://zenn.dev/yosuke00/articles/4084a7b691ff92
- 2のまとめ:https://zenn.dev/yosuke00/articles/94817701b20059
- 3のまとめ:https://zenn.dev/yosuke00/articles/d6384b31c8e162
- 4 & 5のまとめ:https://zenn.dev/yosuke00/articles/ed8c5d4e1ee2f7
- 6のまとめ(前編):https://zenn.dev/yosuke00/articles/0f24ff440a970a
- 6のまとめ(後編):https://zenn.dev/yosuke00/articles/fef6f9382eca24
- 7のまとめ(概要編):https://zenn.dev/yosuke00/articles/10dd52f2d19136
- 7のまとめ(モデル編):https://zenn.dev/yosuke00/articles/f06452bc80cbd3
- 8のまとめ:https://zenn.dev/yosuke00/articles/14505ac0a694c4
- 9のまとめ(Self-Attention編):https://zenn.dev/yosuke00/articles/2d49f54f7f3599
- 9のまとめ(Transformer編):https://zenn.dev/yosuke00/articles/1949569ac2ee58
- 10のまとめ:https://zenn.dev/yosuke00/articles/39160df2ff8dca
- 11のまとめ:https://zenn.dev/yosuke00/articles/9f4c5548ad347b
- 12のまとめ:https://zenn.dev/yosuke00/articles/ef66464c9287a6
- Transformerアーキテクチャと自然言語処理の発展
-
テキストマイニング
https://ja.wikipedia.org/wiki/テキストマイニング
- Attentionを理解するためにRNN、Word2Vec、LSTM、Seq2Seq、Attentionの順に整理してみた
https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778
深層学習(deep learning)の該当節を参照。
-
自然言語処理シリーズ
https://www.youtube.com/playlist?list=PLhDAH9aTfnxL4XdCRjUCC0_flR00A6tJR -
深層学習 ディープラーニングの世界(中にRNNも含まれる)
https://www.youtube.com/playlist?list=PLhDAH9aTfnxKXf__soUoAEOrbLAOnVHCP
Python系(データマイニング(DM)- Pythonの該当節を参照)
Python系(データマイニング(DM)- Pythonの該当節を参照)
自然言語処理編
https://www.oreilly.co.jp/books/9784873118369/
https://github.com/oreilly-japan/deep-learning-from-scratch-2
- https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch01
- https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch02
- https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch03
- https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch04
- https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch05
- https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch06
- https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch07
- https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch08
-
『ゼロから作るDeep Learning 2』の学習ノート:記事一覧 - からっぽのしょこ
https://www.anarchive-beta.com/entry/2020/08/28/185900- 1章 ニューラルネットワークの復習
- 2章 自然言語と単語の分散表現
- 3章 word2vec
- 4章 word2vecの高速化
- 5章 リカレントニューラルネットワーク(RNN)
- 6章 ゲート付きRNN
- 7章 RNNによる文章生成
- 8章 Attention
-
「ゼロから作るディープラーニング②」を読む - FPGA開発日記
-
- ニューラルネットワークの復習
https://msyksphinz.hatenablog.com/entry/2018/07/29/173306
- ニューラルネットワークの復習
-
- 第4章 word2vecの高速化
https://msyksphinz.hatenablog.com/entry/2018/08/05/040000
- 第4章 word2vecの高速化
-
- リカレントニューラルネットワーク(RNN)
https://msyksphinz.hatenablog.com/entry/2018/08/10/040000
- リカレントニューラルネットワーク(RNN)
-
-
Qiita
-
深層学習 / ゼロから作るDeep Learning2
- 3章:https://qiita.com/jun40vn/items/c4d1cef7daca3cdd2b35
- 4章:https://qiita.com/jun40vn/items/04a9adc2857f2a403cab
- 5章:https://qiita.com/jun40vn/items/35f6f0d26f9e58f01e4e
- 6章:https://qiita.com/jun40vn/items/e690dfe80faa6512049f
- 7章:https://qiita.com/jun40vn/items/a6fb2069715fdbc65ae9
- 8章:https://qiita.com/jun40vn/items/ac86f1992b7beefa1f0c
- Transformer:https://qiita.com/jun40vn/items/9135bf982d73d9372238
-
ゼロから作るDeep Learningで素人がつまずいたことメモ: まとめ(2)自然言語処理編
https://qiita.com/segavvy/items/0f2980ad746d797dd8c1- 1章:https://qiita.com/segavvy/items/91be1d4fc66f7e322f25
- 2章:https://qiita.com/segavvy/items/52feabbf7867020e117d
- 3章:https://qiita.com/segavvy/items/1510d8c264edd291e0ef
- 4章:https://qiita.com/segavvy/items/a286143dbcc5a93100b6
- 5章:https://qiita.com/segavvy/items/3e6a9f6bff103824598f
- 6章:https://qiita.com/segavvy/items/fba1595cf64a2462b415
- 7章:https://qiita.com/segavvy/items/883671d07cd7ab26fbe0
- 8章:https://qiita.com/segavvy/items/69ca97ff2d4e8a7144fd
-
「ゼロから作るDeep Learning」自習メモ
- (19)Data Augmentation
https://qiita.com/slow_learner/items/2ede37e1af655775cc1e - (19の2)Data Augmentation 続き
https://qiita.com/slow_learner/items/b705e5cf89a271b9f8d1 - (20)2巻目 自然言語処理編
https://qiita.com/slow_learner/items/bb0ce93a4577bc7f1105 - (21)3、4章
https://qiita.com/slow_learner/items/346f78ae415f649f54ed
- (19)Data Augmentation
-
Tags: 移行, 自然言語処理, AI, word2vec, LLM, Transformer, 開発基盤






