Slide 1

Slide 1 text

文章のベクトル化と
 類似判定
 JX通信社
 機械学習エンジニアインターン
 @andmohiko


Slide 2

Slide 2 text

ニュースアプリを作っているベンチャー企業でインターン しています。
 ニュースアプリでは、例えば速報で同じニュースについて 複数のメディアが記事を配信すると、
 アプリの画面(右図)が同じ内容の記事で埋められてしま い、ユーザーの体験としてよろしくないという問題があり ます。
 
 概要と背景


Slide 3

Slide 3 text

そこで、同じニュースについて書かれている記事を判定 し、重複している記事は自動で取り除きたいという課題が あります。
 本スライドはこの課題を機械学習と自然言語処理によっ てどのように解決したかを説明します。
 概要と背景


Slide 4

Slide 4 text

実際にプロダクトで使われているので具体的な数字や、非公開な部分はふわっ と書いています。数式もなるべく避けているので、エンジニアだけではなく人事 の方もぜひ読んでください。
 読んでみて 良いな と思ったらぜひ面談してください。
 一度カジュアルにお話ししたいです。
 よろしくお願いします
 
 
 この資料について


Slide 5

Slide 5 text

● 概要と背景
 ● 目的と課題のポイント
 ● 実験と手法の比較検討
 ● 結果
 ● さいごに - 今後やりたいこと
 お品書き


Slide 6

Slide 6 text

目的と課題


Slide 7

Slide 7 text

目的
 目的
 ● 同じニュースについて書かれた記事を判定するために、
 機械学習(自然言語処理)で記事のタイトルをベクトルに変換することで、文 章の類似度を計算できるようにすること
 ● 単語をベクトル化する手法は多く研究されている(word2vec, fastText, ELMoなど)が、文章(特に短文)をベクトル化する定番の手法はまだないの で実験を通して見つける


Slide 8

Slide 8 text

「AKB問題」
 ● 同じニュースについての記事でも、メディアによってタイトルに使われる単 語が違います。
 ● 例えば「AKB」と「AKB48」、「オリンピック」と「五輪」などは同じ意味であるた め、単純に単語の一致率などでは乗り越えられないということがこの課題 のポイントです
 ● ちなみにAKB問題は勝手に名付けました。
 課題のポイント


Slide 9

Slide 9 text

文章が「似ている」とは
 ● 文章が似ている、近い内容を表しているかは言ってしまえば主観である
 ● 正解データとなりうるデータセットもこれといってない
 ● そこで今回は定性評価を複数の人に見てもらうことで結果の比較をする
 課題のポイント


Slide 10

Slide 10 text

実験と手法の比較検討


Slide 11

Slide 11 text

今回は以下の手法を比較しました。
 - ワードカウント
 - doc2vec
 - トピックモデル(LDA)
 - LSTMの中間層を取り出す
 - 単語ベクトルとIDFを組み合わせる
 それぞれの手法についてと比較する上で重視したものを説明していきます。
 様々な手法の比較検討


Slide 12

Slide 12 text

ワードカウント
 ● 文章に出現する単語を数える。どの単語が何回使われているかによって文章 を表現する
 ● 単純に単語の出現数を数えるBag of Wordsやそこに希少性を加味したTFIDF などがある
 ● 計算は速いが、スパースなベクトルになってしまうという欠点がある
 ● 当たり前だが、AKB問題を乗り越えられない
 ● 今回は上手くいかなかった
 手法


Slide 13

Slide 13 text

doc2vec
 ● word2vecを拡張したもの
 ● 単語からその周辺の単語を予測することで学習する
 ● 定性評価をするとAKB問題を乗り越えられていない結果になった
 手法


Slide 14

Slide 14 text

トピックモデル(LDA)
 ● 文書が複数の潜在的なトピックから確率的に生成されると仮定したモデル
 ● つまりどのトピック(テーマ)にはどんな単語がよく出現するかを計算すること で、その文書はどのトピックの要素が強いかで表現する
 ● 定性評価だとAKB問題は若干乗り越えられていた
 ● 悪くはないが良くもない
 手法


Slide 15

Slide 15 text

LSTMの中間層を取り出す
 ● LSTMは文章生成によく使われるディープラーニングの手法
 ● 生成する直前の中間層を取り出すことで、その文章をベクトルとして表現で きる
 ● 文脈の依存を考慮できるため長文では強力な手法
 ● AKB問題は乗り越えられるはずだが、今回は短文(30字前後)のため、文脈 がなく逆に上手くいかなかった
 手法


Slide 16

Slide 16 text

単語ベクトルとIDFを組み合わせる
 ● IDF(単語の希少性)を重みにして単語ベクトルを結合する(加重平均をとる)
 ● 文章内で特徴的な単語/重要な単語を拾いつつも、似た意味の単語は同じ ような単語ベクトルになるのでAKB問題を乗り越えられる
 ● 計算も早く、表現力もそれなりにある
 ● 定性評価の結果、今回はこの手法が一番効果があった
 手法


Slide 17

Slide 17 text

結果


Slide 18

Slide 18 text

● 単語ベクトルとIDFを組み合わせた手法を使うことにしました
 ● 類似度はcos類似度で計算し、0~1の値で表現されます。
 ● 定性評価の結果、
 同じニュースだと0.8以上、
 関連のあるテーマだと0.6前後、
 全く関係のない記事は0.3くらいの類似度になった
 結果


Slide 19

Slide 19 text

ここでのポイントは、
 3つ目の例では、タイトルにノイズ(後半の文章)が含まれていても類似度が0.9近 くある。
 4つ目の例では、「五輪」と「オリンピック」という別の言葉が使われていても類似 度が0.8以上ある
 結果の一例


Slide 20

Slide 20 text

メンターからGoサインが出たので作成したモデルをFlaskでAPI化し、Dockerにす るところまで担当しました。
 無事に社内ツールに導入されました。
 その後


Slide 21

Slide 21 text

さいごに


Slide 22

Slide 22 text

● 自然言語処理が楽しいので引き続きやっていきたい
 ● FlaskやDockerなどの技術ももっと勉強したい
 ● 文章のベクトルをもとにレコメンドに挑戦したい
 最後まで読んでいただきありがとうございました!☺
 今後やりたいこと