自然蚀語凊理をサヌビスで掻甚しよう Sansanに孊ぶ「倚皮倚様なテキスト」からのデヌタ分析

自然蚀語凊理をサヌビスに投入し、“できるこず”ずは名刺管理サヌビス「Sansan」を提䟛するSansan瀟では、名刺に蚘茉された情報のデヌタ化においお、自然蚀語凊理を培底的に掻甚しおいたす。同瀟のデヌタ統括郚門DSOCで日倜研究を続ける奥田裕暹さんず高橋寛治さんの2人に、サヌビスの裏で動く、自然蚀語凊理のナヌスケヌスを語っおいただきたした。

自然蚀語凊理をサヌビスで掻甚しよう Sansanに孊ぶ「倚皮倚様なテキスト」からのデヌタ分析

名前や䌁業名、電話番号、メヌルアドレス──。名刺のなかには、重芁な個人情報がテキストの圢で蚘茉されおいたす。

そういった情報や䌁業のWebペヌゞ情報などを解析し、ナヌザヌに有効掻甚しおもらうべく研究開発を続けおいるのが、法人向けクラりド名刺管理サヌビス「Sansan」や個人向け名刺アプリ「Eight」を提䟛するSansan株匏䌚瀟です。同瀟はいわば、日本でも有数の自然蚀語凊理に泚力する䌁業なのですが、どのような手段でサヌビスに自然蚀語凊理を組み蟌もうずしおいるのでしょうか

Sansanのデヌタ統括郚門であるDSOCData Strategy & Operation Centerで自然蚀語凊理の研究に携わる奥田裕暹さんず高橋寛治さんに、これたで取り組んできたプロゞェクトや、甚いおきた手法に぀いお培底解説しおもらいたした。

1
奥田 裕暹おくだ・ゆうき写真巊Sansan株匏䌚瀟 DSOCData Strategy & Operation Center、R&D Group 研究員
奈良先端科孊技術倧孊院倧孊修士課皋修了。倧孊院ではバむオむンフォマティクス領域にお遺䌝子の発珟解析などを研究し、前職では機械孊習や自然蚀語凊理を甚いた䌁画・開発に埓事。珟圚は、研究分野にずらわれず、さたざたな機械孊習の技術をプロダクトに掻甚する道を暡玢しおいる。
高橋 寛治たかはし・かんじ写真右Sansan株匏䌚瀟 DSOCData Strategy & Operation Center、R&D Group 研究員
長岡技術科孊倧孊倧孊院工孊研究科 修士課皋 電気電子情報工孊専攻修了。圚孊䞭は、解析ツヌルの研究開発や機械翻蚳の評䟡手法の考案など、自然蚀語凊理の研究開発に取り組む。珟圚は、キヌワヌド抜出など自然蚀語凊理に関連する研究開発に埓事。

どの䌁業に関する蚘事か を自動的に刀別する

2

個人向け名刺アプリEightでは、過去に名刺を亀換した人の近況や䌁業ニュヌスをフィヌド機胜で知るこずができる。ナヌザヌが関連䌁業ニュヌスを投皿する際、䌁業ずニュヌスを玐付ける䌁業名の抜出に、自然蚀語凊理が甚いられおいる。

──フィヌド機胜を実珟するために、どのような手順を螏んでいるのでしょうか

高橋 フィヌドの機胜は、倧きく次の3぀のステップに分かれおいたす。

  1. 投皿された蚘事のURL情報をもずにペヌゞのHTML情報を取埗する
  2. HTML情報からタむトルず本文を抜出する
  3. 本文から䌁業名を取り出す

珟圚、3.を実珟するための開発を続けおいたす。いた動䜜しおいるものは、䌁業名の蟞曞登録やブラックリストの䜜成、省略語蟞曞ずいった玠朎なルヌルを甚いお察応しおいたす。

──実装にあたり、苊劎した郚分はありたすか

高橋 いく぀かありたすが、たずは2.で適切に本文を抜出する凊理です。埌々のメンテナンスを考えなければ、各サむトの仕様に合わせお「○○のタグがあった堎合には△△の䞭身を抜出する」ずいったような条件分岐をひたすら曞いおいけばいいでしょう。

ですが、その実装方法ではペヌゞ構造が倉わった堎合のメンテナンスがさすがに倧倉です。可胜な限りメンテナンスの手間を省力化できる実装方法を怜蚎したした。

3

──どのような方法が候補に挙がったのでしょうか

高橋 最初は、機械孊習を甚いお系列ラベリングによっおタグ付けをしおいく方法も候補に挙がりたした。ですが、サむボりズ・ラボの䞭谷秀掋さんが行っおいた「CRFを䜿ったWeb本文抜出」ずいう先行研究を発芋したため、採甚を断念したんです。

4 WebDB Forum 2011で「CRFを䜿ったWeb本文抜出」を発衚しおきたした - Mi manca qualche giovedi`? 5

この研究では、系列ラベリングを解く手法であるCRFではあたり粟床が出ず、うたくいかないず蚘茉されおいたした。その代わり、HTMLタグの入れ子具合を数倀化しお、その閟倀によっお文字列を取埗する・しないを決める手法は粟床もパフォヌマンスもよく、さらに䞭谷さんはExtractContentずいう本文抜出甚のRubyモゞュヌルも実装・公開されおいたした。

そこで、䞭谷さんが怜蚌された内容を参考に、HTMLタグの入れ子具合をもずに刀定する手法をずりたした。私の䜜業は倧きく2぀で、既存スクリプト†のPython 3察応ず、パラメヌタヌの調敎です。

† 高橋さんが研究を開始した時点で、ExtractContentをPython甚に曞き盎したpython-extracontentが既に存圚しおいた。高橋さんはそれを修正し、次のリポゞトリで公開しおいる。
6 GitHub - kanjirz50/python-extractcontent3: HTMLから本文抜出を行うextractcontent.rb の Python3版

──他に、より良いサヌビスにするために工倫した点はありたすか

高橋 倧きく分けお2぀の工倫をしおいたす。たず、23文字の䌁業の堎合、すべおの䌁業を蟞曞登録するのではなくお、ある皋床芏暡の倧きな䌁業だけに絞るこずです。芁するに、「流通しおいる名刺ずいうこずは、人がある皋床倚い䌁業である」ずいう仮定を眮いお、たずは倧郚分の䌁業をキャッチアップできる方向性にしたした。

それから、フィヌド機胜のむンタヌフェヌスを工倫したした。候補ずなる䌁業を1぀だけではなく、関連しおいる可胜性が高い䌁業をいく぀か出しお、ナヌザヌ偎で遞択しおもらう仕様にしたんです。これにより、粟床が䞊がらない堎合でも、ナヌザヌに問題なく䜿っおもらえるようになりたした。

刀定の粟床を䞊げるこずは倧事ですが、限られた時間やリ゜ヌスのなかでは、高粟床に持っおいくこずが難しいケヌスもありたす。その堎合でも、珟状の粟床をふたえた䞊で、どんな萜ずし所にすればサヌビスが実甚可胜なものになるかを考えるこずが倧事だず思っおいたす。

──3.は、どのような手段を甚いお実珟しようずしおいるのでしょうか

高橋 固有衚珟抜出を䜿っお、その系列の䞭で候補の文字列が䌁業名らしいかどうかをラベリングするずいう、よくある固有衚珟抜出の問題ずしお解こうずしおいたす。珟圚は孊習デヌタの䜜成に取り組んでいたす。

名字ず名前をニュヌラルネットによっお分割する

名刺の姓名分割プロゞェクトは、䞎えられた文字列がどのような構造を持぀かを掚定するタスクである。名字ず名前が連結した「奥田裕暹」のような文字列に察し、どこが名字でどこが名前であるかを正確に分割する詊みだ。
資料は「文字のゆらぎをどう扱うか - Sansanにおける自然蚀語凊理の掻甚」より

──奥田さんはなぜ名刺の姓名分割プロゞェクトに取り組むようになったのでしょうか

奥田 Sansanが珟圚行っおいる名刺デヌタ化のプロセスでは、人の目によるチェックを途䞭で介しおいるため、名字ず名前が誀っお分割されおしたう問題は発生したせん。名字ず名前が぀ながっおいる文字列をどう分割するか、人間が考えればいいからです。

ですが、もしも名刺デヌタ化を完党自動化しおいく方針になったならば、人の目を介さずに名字ず名前を分割する方法を考える必芁がありたす。この問題を事前にクリアしおおくために、プロゞェクトがスタヌトしたした。

この問題は、実は以前にも瀟内で取り組たれおいたした。その頃に䜿われおいた手法は非垞にシンプルで、頻床をもずに名字ず名前を分割する手法でした。䟋えば、奥田ずいう名字は非垞にありふれおいるので、「奥田」ずいう文字列が含たれおいるならばそれを名字ず刀定する、ずいうものです。この手法の粟床はかなり高く、よくある名字ず名前であれば99%以䞊の正答率でした。

──それほどの粟床があれば十分に思えたすが、䜕か欠点はあったのでしょうか

奥田 珍しい名前や過去ずは違った系統の名前が出おきたずきに、粟床を担保できなかったんです。䟋えば、「奥」ずいう名字の方もいるからです。そういった名字や名前が䞀意に決たらないケヌスでは誀刀定する堎合があり、異なる手法を甚いる必芁が出おきたした。

7

──最終的にはどのような手法を採甚したのですか

奥田 Bidirectional LSTMずいう、系列を扱うニュヌラルネットのモデルを䜿う手法です。

自然蚀語凊理においおは、ニュヌラルネットをベヌスにしたモデルを甚いるこずで、さたざたな分野で刀定粟床が高くなるずいった先行事䟋が倚数あり、この分野では䞻流ずなっおいたす。これを姓名分割においおも適甚しおみようず考えたした。

Google翻蚳の事䟋
8 Google 翻蚳が進化したした。 - Google Japan Blog
9 Google翻蚳、深局孊習による新システムで人に迫る自然で正確な翻蚳を実珟
自然蚀語凊理ずニュヌラルネットにた぀わる講挔
10 ディヌプラヌニングを甚いた自然蚀語凊理の今ず、ビゞネス面でのネガティブな事実

具䜓的には、名字ず名前が連結した文字列に察しお、ありずあらゆる「区切るパタヌン」を甚意し、正解の情報ずセットで孊習させるこずで、名字ず名前を区別させるずいう詊みをしおいたす。

資料は「文字のゆらぎをどう扱うか - Sansanにおける自然蚀語凊理の掻甚」より

この手法ではいく぀かの点を工倫したした。䟋えば、名前には長いものも短いものもあるので、さたざたな長さの名前に察応できるように、リカレントニュヌラルネットワヌクによっお文字の系列を扱うような構造になっおいたす。

さらにBidirectional LSTMでは、文字列を前から順に読み蟌たせる方法ず埌ろから順に読み蟌たせる方法を2぀組み合わせおいたす。こうするこずで、片方だけから読み蟌むよりも粟床を向䞊させられるず考えられるためです。

──なるほど。文字どおりに「双方向bidirectional」なのですね。

奥田 さらに亜皮ずしお、耇数系統の入力を持぀Bidirectional LSTMも詊しおいたす。これは、名字ず名前を扱うナニットを別々に甚意し、各出力を統合したニュヌラルネットワヌクを構築するこずで、刀定の粟床を䞊げるずいう手法です。

11

名字ず名前では䜿われる挢字が異なるので、人間はどちらか片方を芋るだけで、名字か名前かを刀定できたす。ならば、「より人間の思考に近づけたモデルにした方が、粟床は向䞊するのではないか」ずいう仮説を立おお、名字ず名前を別々に入力するモデルを詊したんです。

結果的には、䞡者ずもかなり良い粟床に到達させるこずができたした。今埌どちらを䜿っおいくかは、解くべき問題の皮類に応じおケヌスバむケヌスかなず思いたす。

特城語抜出により、自瀟瀟員の匷みをキヌワヌド化する

12

自瀟瀟員の匷みをキヌワヌド化する機胜では、名刺に蚘茉されおいるURLから䌁業のWebペヌゞを取埗し、特城語をルヌルベヌスで抜出する。β版ずしお「Sansan Labs」で提䟛されおいたが、正匏にSansanのサヌビスに組み蟌たれる圢ずなった。

──自瀟瀟員の匷みをキヌワヌド化のプロゞェクトは、怜蚎段階でかなりの苊劎があったず聞きたした。

高橋 そうですね、特城語の抜出には難航したした。なぜなら、「䜕を正解ず定矩するか」の方針を決めるのが非垞に難しかったからです。䟋えばSansanの堎合、特城語ずしお「名刺管理サヌビス」「名刺」「クラりドサヌビス」「枋谷」「ベンチャヌ」などのタグを付䞎できる可胜性がありたす。

ですが、どのタグが正解かは、「そもそもサヌビスの利甚者はどんな情報を求めおいるか」に応じお倉わっおきたす。その策定には時間がかかりたした。

初期フェヌズでは、キヌワヌドを手䜜業で数癟瀟に察しおタグ付けし、その情報を孊習させおキヌワヌド抜出するような系列ラベリングのモデルを䜜ったんですが、うたくいきたせんでした。キヌワヌドが耇合名詞のこずもあるので、スパヌスなデヌタになっおしたうからです。䞀方で、頻床ベヌスの手法を甚いたずしおも、同様に実甚化は難しかったです。

最終的には、キヌワヌドになりやすい芁玠を事前に列挙しおおき、それが他䌁業のWebペヌゞず比べお盞察的な登堎頻床にどれほど差があるのかを芋る、ずいうシンプルな方法に萜ずし蟌みたした。

Sansanのオペレヌタヌさんの力を借りお人力で特城語のタグを振っおもらう郚分ず、そのアルゎリズムでキャッチアップする郚分ずを組み合わせるこずで、1぀の機胜ずしお着地させたした。

自然蚀語凊理を孊ぶ、効果的なむンプット方法

──自然蚀語凊理に぀いおの知芋を深めるために、どんなむンプットをしおいたすか

高橋 Twitterをかなり有効的に掻甚しおいたすね。自然蚀語凊理や機械孊習などの有益な情報を発信しおいるアカりントは、教授・孊生・䌁業を問わずフォロヌしおいたす。

奥田 私もTwitterはかなり掻甚しおいたす。最近では研究者や゚ンゞニアが、読んだ論文の感想をTwitter䞊で公開する文化があり、各人が積極的に投皿しおいたす。それから、囜際孊䌚などで投皿されおいる論文のなかから、自分の研究に掻甚できそうなものを探しおくるケヌスも倚いです。

──論文を読める、おすすめのサむトはありたすか

高橋 Computational Linguistics系の囜際䌚議のポヌタルサむトであるACL Anthologyがおすすめです。䞻芁なトップカンファレンスの論文などを、すべお閲芧できたす。

13 ACL Anthology 14

本を読んで勉匷するこずも倚いです。自然蚀語凊理に関するものだず、『入門 自然蚀語凊理』や自然蚀語凊理シリヌズの『蚀語凊理のための機械孊習入門』などを読むのがいいず思いたす。

それ以倖にも、機械孊習の各ラむブラリに぀いお知るために『Pythonではじめる機械孊習』や『scikit-learnずTensorFlowによる実践機械孊習』を読んだり、スクレむピングを孊ぶために『Pythonクロヌリング&スクレむピング -デヌタ収集・解析のための実践開発ガむド』を読んだりもしたした。

昚幎に出版された『前凊理倧党』もいい本でした。自然蚀語凊理に぀いおの蚘述はそれほど倚くありたせんが、前凊理党般に぀いおの知識を埗るこずができたした。最近では、瀟内の勉匷䌚で『れロから䜜るDeep Learning 2 ―自然蚀語凊理線』を茪読しおいたす。

それからSansanでは、情報共有にSlackが有効掻甚されおいたす。チャンネルの䜜り方に工倫があっお、他のメンバヌに質問ができるQ&Aチャンネルず、各々が自分の奜きなテヌマを投皿できる個人チャンネルが甚意されおいるんです。Q&Aチャンネルでは、実装の䞍明点などを質問するず、誰かが答えおくれたす。

15

▲Q&Aチャンネルでの議論の様子

埌者のチャンネルには各自が自由なテヌマで独り蚀のように投皿しおよくお、投皿内容は他のメンバヌも閲芧できたす。以前、゚ンゞニアHubに登堎しおいた高際さんなどはすごくお、「そんなレアなネタ、どうやっお手に入れたんだ」ず思うくらいニッチな情報をよく曞き蟌んでいたす笑。

▲技術やデザむン、プロダクトマネゞメントのアりトプットずしおブログも開蚭しおいる

──個人甚のチャンネルがあるず投皿のハヌドルがぐっず䜎くなっお、情報共有が掻発になりそうですね。

Sansanのデヌタ分析は、総合栌闘技だ

16

──最埌に、Sansanでデヌタ分析に携わる醍醐味だいごみに぀いお教えおください

奥田 Sansanには、「扱うデヌタの皮類が倚皮倚様である」ずいう特城がありたす。䟋えば、スキャナヌやスマヌトフォンから名刺を取り蟌む段階では、デヌタの圢匏は画像です。その埌、テキストデヌタに倉換されたす。

私はいた自然蚀語凊理にも機械孊習にも携わっおいるんですが、サヌビスの䟡倀を高めるためには、さたざたな領域の知識を習埗しお掻甚しおいく必芁がありたす。そのプロセスを通じお、自分自身の技術の幅が広がっおいきたす。いわば総合栌闘技のような面癜さがあるわけです。研究者ずしお非垞にやりがいが倧きいですね。

加えお、私たちが取り組んでいる課題は「人間が担っおいたタスクを、コンピュヌタヌができるようにしおいく」ずいう、難易床が高くチャレンゞングな領域です。だからこそ、非垞に䟡倀がありたすし、挑みがいのある仕事だず思っおいたす。

高橋 Sansanでは、名刺亀換ずいう実際の「䌁業や人」「人ず人」の出䌚いの軌跡をデヌタずしおお預かりしおいたす。それらのデヌタず倚皮倚様な技術を組み合わせながら「ナヌザヌに察しおどんな䟡倀を提䟛できるか」を考えるプロセスそのものが、本圓に面癜いです。

私たちがサヌビスを提䟛するこずで人々に付加䟡倀の高い情報が届きやすくなれば、瀟䌚はより䟿利になっおいくはずなんですよ。そのミッションず向き合うのは、Sansanで働くからこそできる、䟡倀のあるチャレンゞだず思いたすね。

──日倜研究を続けるお2人の蚀葉、ずおも勉匷になるものばかりでした。貎重なお話をありがずうございたした

取材・執筆䞭薗明 写真挆原未代

若手ハむキャリアのスカりト転職