DNET_NLPAI - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

言語処理(AI)

概要

言語処理 ≒ 自然言語処理は、AI(機械学習・深層学習)最大の金脈と言われる。

  • 以前は、形態素解析、構文解析、意味解析、文脈解析
    言語処理の該当節を参照)(言語学的)
  • 単語を高次元のベクトルに置き換える分散表現という技術を用いる。
    • 単語の数が多いためデータが高次元かつスパース
    • 単語データの並びのことをシーケンスと言い、これが文章にあたる。

自然言語処理

  • 歴史は機械翻訳の歴史
  • まだまだ未熟な分野
  • AI完全問題と言われる
  • MMIとしては非常に魅力的

分野ごとにマチマチ

  • 深層学習の導入で機械翻訳の性能が大幅に向上。
  • 構文解析などは、精度は向上しているが、大きな進捗は無い。
  • 文脈解析などは既存のアプローチでは実用的な精度が無い。

目的と学習のズレ

  • 自然言語処理では目的と学習にズレがあることが多い。
  • ズレている気がするタスクで学習するが目的のタスクを達成できる的な。

詳細

体系

N-gram LM

RNN LM

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に結び付ける)
  • 文節チャンキング(名詞や動詞、形容詞といった品詞にタグ付けを行う)
  • 意図抽出(質問・要望などの情報をテキストから抽出)
  • 意味的(セマンティック)アノテーション(文脈から判断できる情報の付加)
  • 分類アノテーション(分類もアノテーション)
  • センチメント・アノテーション(感情分析)

文書検索チャットボットで利用される。

文書検索

  • 文書を特徴量に変換し類似度の順に並べて提示する。
  • TF-IDFBM25

チャットボット

(質問応答システム)

質問を特徴量に変換しパターン化された応答を提示する。

  • プリセールス
  • コールセンター
  • スマートスピーカー
  • バーチャルアシスタント

機械翻訳

機械翻訳

その他

  • テキスト要約
  • 文書作成支援(文章校正)

文の構成性

統語的階層構造(句構造)

系列の並び(現在主流)

テキスト・コーパス

自然言語の文章を構造化し大規模に集積したもの。

  • 定義

    • 機械可読なテキスト・データを収集したもの。
    • ある目的のため
      (現実の分布を考慮しサンプリングした)
      テキスト・データを収集したもの。
  • 分類

    • 生コーパス
      自己教師あり学習(機械学習の該当節を参照)における情報源

    • 注釈付きコーパス
      人手 or 機械的にアノテーションが付与されたテキスト・データ

      • 教師あり学習の学習データ
      • 伝統的NLPシステムの評価データ

ベクトル化

  • エンコード、エンコーディングとも言う。
  • 分布仮説から分散(意味)表現とも言う。

単語のベクトル化

単語の意味

  • 初期のRNN LMなどで、単語に意味付けしない場合は、
    単語でOne-Hotエンコーディングしたベクトルを使用していた(高次元統計の問題)。

  • シソーラスによる手法
    言語資源(辞書)を作成する。

    • 言語のクラス図のようなネットワークを作成

    • 単語間の類似度の算出などができる。

    • 最も有名なシソーラスはWordNet(NLTKライブラリ)

    • 問題点

      • 人手によって作成するので作成コストが高い
      • 時代によって変化する意味を追うことが難しい。
      • ニュアンスを表現できない(シチュエーション毎の使い分けができない)。

移行メモ(正誤): 元ページの「単語感の類似度」は「単語間の類似度」、
「意味を負うことが難しい」は「意味を追うことが難しい」の
誤変換と判断し修正した。

  • テキスト・コーパスから知識を抽出、構造化する手法。
    • TF-IDFBM25(カウントベースの手法)
    • 分布仮説
      • カウントベースの手法 > 共起頻度アプローチ
      • 推論ベースの手法 > 文脈予測アプローチ

TF-IDF

  • 概要

    • 文書中の単語を頻度と希少性を加味して評価
      • 複数の文書に横断的に使用している単語は重要ではない
      • 対象する文章内で頻度が高く出てくる単語は特徴的
    • 単語埋込(Word Embedding)モデルではなく文書埋込(Text Embedding)
      • 各単語の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で使われているらしい。

    • 何を表示させるか?

      • 単語をバラして検索単語が含まれていたら対象とする。
      • → 頻出する単語では、どの文書も対象になる。
    • 表示順序をどうするか?

      • 単語が多く登場する。
      • → 長文が有利になる。

BM25

 φ = 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:
 = 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つの単語の意味的な結合を得る様な\
  加法構成性は持たない。

移行メモ(正誤): 元ページの「含まなたいめ」は「含まないため」の
誤記と判断し修正した。

  • この(意味をベクトルで表現する)モデルを
    「単語埋込(Word Embedding)モデル」と言うらしい。

word2vec

  • 2013年に登場した技術

  • 文脈予測アプローチの代表例の
    「単語埋込(Word Embedding)モデル」

  • 自己教師あり学習(機械学習の該当節を参照)の
    深層学習(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 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の有効性が実証されているとのこと。

fastText

  • word2vecがベースの進化形で、Skip-gramモデル * Negative Sampling

  • 発想

    • 文脈予測アプローチではなく単語の内部構造に注目してベクトル化。

    • ワードをサブワード(tri-gram、言語処理の該当節を参照)に
      分割しワードをサブワードのベクトルの足し算でベクトル化する。

    • 例えば、WhereはWhenと似たベクトルになり、未知語もベクトル化できる。

      • 単語のベクトル表現の生成も高速化され、
      • テキストの分類も高速で行える。
      • 活用系をまとめることができる。
  • モデル

    • 入力Iはワードと対応するサブワードが複数個
      • Where
      • <Where>
      • <Wh, Whe, her, ere, re>
    • WiIで列ベクトルに圧縮(全結合)
    • ベクトルを足して
    • Negative Samplingで分類(?)。
  • 成果

    • 意味の類推

      • CBOW < fastText
      • 複合語・合成語のあるドイツ語で大きく改善
    • 文法理解

      • 加法構成性:longer - long + tall = taller
      • 格変化、活用の多いドイツ語・チェコ語で大きく改善
    • 未知語に強い
      kindness = kind + ness

    • 少データでOK
      Wikipedia100%をCBOWで学習 < Wikipedia1%をfastTextで学習

ELMo

  • 単語埋込(Word Embedding)表現が可能な2層のLSTMを用いた言語モデル
  • 文脈に応じた単語の意味を演算して表すことが可能

文のベクトル化

BOWモデル

(Bag of Words)

単語の出現回数(学習は不要)で、
語順に依る意味の違いを表現しないが、
類似文書検索タスクでは十分精度が出る。

  • 日本語は英語のように単語が空白で分かれていない場合、形態素解析
    言語処理の該当節を参照)で単語単位に分割
  • 文章毎に各単語が何回出現したかを数え上げ、
    長さが語彙数、値が出現回数となるベクトルにする。
  • 出現回数そのものでなく、TF-IDFといった手法を用いて
    単語の重みを調整する方法もある。

文の分散表現の構成法

doc2vec

  • 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モデル

自然言語処理(NLP)モデル

Attention

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系)の該当節を参照。

  • 同様に機械翻訳を目的タスクとする

  • 2017年(6月)に登場した技術で、Attentionが元ネタで、
    GPTやBERTの基礎、

  • 最近の自然言語処理のベースとなるモデルで
    GPTやBERTなど最新モデルに応用されている。

  • BLEU

    • 英→独:28.4
    • 英→仏:41.8

Transformer系

GPT-n

テキスト生成系(Transformer系)の該当節を参照。

  • Generative Pre-trained Transformer

  • 非営利団体OpenAIが開発したもので、
    初代のGPT-1はBERTと同じ2018年(6月)に発表

  • 2019年にGPT-2、2020年にGPT-3が発表
    (中身は同じで、規模と学習データの量を大きくしたもの)

  • 悪用リスクのためOSS化されていない
    (OpenAI へAPIの利用申請が必要)

  • 2022年11月にChatGPTが公開される。

BERT

テキスト生成系(Transformer系)の該当節を参照。

  • Bidirectional Encoder Representations from Transformers

  • 2018年(10月)に論文によって提案されたTransformer
    発展させたモデル。

  • GPT-nを少し改変しているので、高性能で汎用性が高く応用し易い。

  • BERT学:内部で何が行われているか?

T5、Switch、Meena

Transformerの上に構築された自然言語処理(NLP)モデル

  • T5
  • Switch
  • Meena

GLUEデータセット

GPTやBERTなどのマルチタスク自然言語処理モデルの
性能評価目的で開発された。

LLMの特徴

GPTやBERTなどがLLMに該当する。

ポイント

超大規模化

  • べき乗則で次単語予測の性能が向上、汎化性能も向上。

  • ただし、GPT-4の辺りで頭打ちになった。

  • 創発

    • モデルを大規模化していくとある時点から急に解けるようになる現象
    • 大規模言語モデル(LLM)の創発的な特性 ≒ コンテキスト内学習
  • 仮説

    • サブネットワークの発掘

      • 宝くじ仮説
      • 平坦な最小解仮説
    • 構成属性文法仮説
      言葉の背後の構造(コンテキスト)を理解できるようになる。

コンテキスト内学習

テキスト生成系(Transformer系)の該当節を参照。

  • 与えられたコンテキスト内で情報を学習し、その学習を元に出力を生成する。
  • Zero-Shot学習とも呼ばれ、プロンプト(過去文脈)でパラメタ更新はしないが
    Attention機構を変形して見方を変えると勾配降下法をシミュレーションしている。

順問題を学習できる。

  • 学習するAIは基本的に逆問題的に学習する。

  • LLMは順問題の定義を言語的&確率的に学習できる。

  • ただし、

    • この順問題の定義の学習は、あくまで言語的&確率的であって
    • 学習で構築した論理をベースに質問に回答している訳ではない。
  • そもそも、

    • LLMは言葉の意味を理解しているのか?

    • 人間がどのように言葉の意味を理解しているのか不明。

      • 直感的に思考して会話するケース
      • 言語から学習したモデルを使って論理的に思考して会話するケース
  • 恐らく、人間とLLMの言語理解能力の間に大きな違いがある。

ポランニーのパラドックス

人間は言葉で表せる以上のことを知っている。

  • 人間は言語化されないモデルを内包する(暗黙知)。

  • LLMでは明文化されない暗黙知部分を学習できない。
    (いずれも 人工知能(AI)の該当節を参照)

    • フレーム問題
    • 記号接地問題
    • 身体性
    • 知識獲得のボトルネック(期待はある)
  • 言語的&確率的な学習で暗黙知を学習したように見える時もある。

汎用性と用途

エージェント

サポート

  • 翻訳・要約
  • トレーニング
  • カウンセリング
  • コーチング
  • 新たな発見(藤井聡太的な)

様々な文書生成

  • 雛形生成
    • シナリオ、脚本
    • 作詞
    • 契約書

プログラミング

プログラムを生成する。

検索エンジンの代替

人間が参照しきれないテキストから意図する情報を抽出

インターフェイス

特に、音声インターフェースなど。

人間の言語理解能力の理解

LLMとの対比で人間の言語理解能力を理解する。

問題点

幻覚

誤った「解釈」が(存在しない)新事実を創出してしまう。

故障

記憶の機能がなく、破滅的忘却で壊れる可能性がある。

学習効率

  • 人間と比べるとかなり効率が悪い(コストが高い)。
  • ただし、繰り返し利用でコストは償却可能と言う考え。

リスク

セキュリティ

コレはChatGPTなどのシステム・アプリの問題。

偽情報の拡散

何を持って偽情報なのか?

機密情報の拡散

コレは、≒ セキュリティ。

倫理・道徳

何を持って倫理・道徳なのか?

ポリコレ

目的駆動学習(人間のフィードバックによる強化学習)でポリコレにフィットさせたりする。

仕事の変化

Web検索で仕事が変化したように、LLMでも変化するものと考えられる。

参考

Wikipedia

Qiita

YouTube

AIcia Solid Project

深層学習(deep learning)の該当節を参照。

ライブラリ

オープンソース

Python系(データマイニング(DM)- Pythonの該当節を参照)

プロダクト

Python系(データマイニング(DM)- Pythonの該当節を参照)

サービス、ソリューション

Google翻訳

Google翻訳

DeepL翻訳

DeepL翻訳

ゼロから作るDeep Learning

自然言語処理編
https://www.oreilly.co.jp/books/9784873118369/

サンプル

https://github.com/oreilly-japan/deep-learning-from-scratch-2

その他、参考


Tags: 移行, 自然言語処理, AI, word2vec, LLM, Transformer, 開発基盤

⚠️ **GitHub.com Fallback** ⚠️