はじめに
こんにちは。LAPRASのプロダクトマネージャーの鈴木です。
「#あなたの得意や好きなことに一言」 キャンペーンにご参加いただけた方々、本当にありがとうございました。
様々なTweetをしていただき、嬉しく感じております。
けっこう合ってる👀#LAPRASポートフォリオ で分析した結果、私のTagsは「Swift」「Xcode」「iOS」「Objective-C」「meetup」「Android」でした https://t.co/2QwIlImlpI #あなたの得意や好きなことに一言
— Shingo Takagi (@zizi4n5) May 27, 2020
このタグにピンときたらご連絡を:#LAPRASポートフォリオ で分析した結果、私のTagsは「Unity」「PHP」「C#」「Rails」「Ruby」「docker」「Unity3D」でした https://t.co/V3hM12vgo7 #あなたの得意や好きなことに一言
— さいろす (@cyross4vocaloid) May 27, 2020
わりと順当な結果だな。だいたいぼくって感じだ。#LAPRASポートフォリオ で分析した結果、私のLanguagesは「Common Lisp」「Rust」「C」「Nim」「Clojure」「Python」でした https://t.co/UhB9sQRl6x #あなたの得意や好きなことに一言
— t-sin (@sin_clav) May 27, 2020
TagsとProgramming Languages機能に楽しんでいただけた方もいる一方で、課題点やご提案について一言をいただけた方々もたくさんいらっしゃいました。
今回は、そんな頂いた改善のヒントに対して、
- 有志の「LAPRAS向上委員会」メンバーによって今後できそうなことについて話し合った結果
- 直近で実施したサービス改善
について、お礼の気持ちを込めてご報告させていただきます。
今後対応していきたいこと
まずは、今回いただけているご意見について、有志のLAPRAS向上委員会によって話し合った内容をご共有いたします。
Javasc「ir」ptが入っている問題
JavaScirptっておかしなの混じってた。#LAPRASポートフォリオ で分析した結果、私のTagsは「js」「JavaScript」「Java」「JavaScirpt」「astah」「Go」でした https://t.co/XEkhweVg2a #あなたの得意や好きなことに一言
— shoito (@shoito) May 27, 2020
JavaScriptが2個あるの、実装面の辛さが出てるな#LAPRASポートフォリオ で分析した結果、私のTagsは「js」「JavaScript」「JavaScirpt」「HTML」「GitHub」「Go」でした https://t.co/VswrH6OU7y #あなたの得意や好きなことに一言
— JJ (@konojunya) May 27, 2020
お答え
JavaSc「ir」pt については多くのご意見をいただきました。
このような、明らかなTypo がタグに含まれてしまう問題については詳しく調査を行い、既に修正を行いました。
詳細は下記の「サービスアップデートのお知らせ」をご覧ください。
ForやOFなど意味を持たない単語が入る問題
Forってなんだろう#LAPRASポートフォリオ で分析した結果、私のTagsは「golang」「Go」「cli」「For」「TypeScript」「js」「JavaScript」でした https://t.co/ptac8x8kMp #あなたの得意や好きなことに一言
— にぼし (@mpppk) May 27, 2020
OF とは一体??#LAPRASポートフォリオ で分析した結果、私のTagsは「Rails」「OF」「プログラマ」「プログラマー」「golang」「Go」「code」でした https://t.co/OUEatDSW2g #あなたの得意や好きなことに一言
— やすだあつし (@ayasuda_jp) May 27, 2020
考えられる原因
・タグ抽出における形態素解析器が英語に対応していない
現在、タグ抽出における形態素解析器には、日本語のモデル (MeCab + Neologd) を用いており、英語には対応していません。このため、全ての英単語が名詞として扱われてしまい、タグとして抽出されてしまっていると考えられます。(韓国語や中国語などの他の言語も同様)
特に、GitHub のdescription などは英語で書くことが多いため、これらも拾ってしまっているのではないかと思います。
考えられる解決策
・ブラックリスト方式で弾くのが第一歩
まず第一に、冠詞や前置詞など、タグとして抽出するのが不適当な英単語については、ストップワードとして弾くのが一番の近道かと思われます。
・バイリンガルの形態素解析器の構築する
ストップワードで弾くことができない単語については、形態素解析器を英語にも対応させる必要があります。その場合、まずは文書の使用言語を判定し、使用する形態素解析器を切り替えるのが現実的な方法と思われます。
さらに、1つの文書の中に複数の言語が入り混じっているような場合、部分ごとに異なる形態素解析器を用いたり、完全に多言語対応したモデルを構築する必要があります。多言語に対応したMeCabの辞書を作ってみるというのも技術的には面白そうです。
自動生成されたコードが入ってしまう問題
自動生成コードがガッツりカウントされてるから全然役に立たないよ。HTMLもGoもCSSもJSも全然手で書いてないよ。#LAPRASポートフォリオ で分析した結果、私のLanguagesは「HTML」「Go」「Rust」「CSS」「Emacs Lisp」「JavaScript」でした https://t.co/v2ge1IcTJK #あなたの得意や好きなことに一言
— κeen (@blackenedgold) May 27, 2020
考えられる原因
・自動生成なのかどうかの判断が難しい
自動生成されたコードが入ってしまうのは昔からいわれていた問題の1つなものの、コミットごとの言語量がわからないため、どれが本人が書いたファイルでどれが自動生成なのかが判断が難しくなってしまっています。
考えられる解決策
・自動生成の典型的なパターンをつくり、そのルールに当てはまったら無視する
このディレクトリ構成だったらこのファイルは無視する、のような典型的なパターンを作り、そのルールに当てはめながら無視していく、などが考えられます。このパターンを、言語間の共起頻度や量を元に割り出したり、.gitignore によく書かれている内容から生成するなどの方法も検討できないかも考えます。
・.gitignore によく書かれているファイル名のリストを作ってブラックリストにする
懐かしいものが多い
全体的になつかしい……😇
コード書いた時期で重み付け入れると自分の感覚と近くなるかもって思いました。
===#LAPRASポートフォリオ で分析した結果、私のLanguagesは「Java」「OCaml」「C」「Python」「GLSL」「CSS」でした https://t.co/NAfsCUI7JR #あなたの得意や好きなことに一言— かばやん🎀👩🏻💻 (@yaruki_beam) May 27, 2020
お答え
時間経過による減衰はすでに考慮に入れているものの(2年でスコア半分など) 、バランス調整を検討します。せっかく昔アウトプットしたのに、あれは反映されないのか…みたいな気持ちもあるため、絶妙な調整について検討していきます。
TaKO8Ki さんからのご意見
こっちもnand2tetrisのせいでえらいことなってる / #LAPRASポートフォリオ で分析した結果、私のLanguagesは「Assembly」「Ruby」「HTML」「CSS」「Scilab」でした https://t.co/wuqa4pGj4x #あなたの得意や好きなことに一言
— TaKO8Ki (@takoyaki3160) May 27, 2020
お答え
言語量はすべてのプロジェクトの足し算ではなくて、もう少し平準化した値にした方がよいかもしれないです (創業期から課題感があるが、なかなか優先度あがらず…)。
hassakuさんからのご意見
個人的には、sample/samplesは上に出て来られてもな...ってなるw
なので、ユーザー側からサジェストされても嬉しくないタグはそれをフィードバックできる仕組みがあると、総体としてノイジーなタグがあぶり出されて良いではないかと思う。— hassaku #実践 AWS CDK (@hassaku_63) May 27, 2020
お答え
たしかに自分につけないでほしいタグを指定できるようにするのはやりたいです。検討させていただきます!
ご意見、ご要望ありがとうございます
他にもたくさんご意見、ご要望をいただきましたが、今回の記事では以上にて今後考えている対応策についての、LAPRAS改善委員会による回答をまとめさせていただきました。
改めまして、「一言」をいただけたみなさまにお礼を申し上げます。 ありがとうございました。
引き続き、ご意見をいただけますと幸いです。
サービスアップデートのお知らせ
ご意見ご要望のなかで、特に多くいただけていた、「Javascirptが入っている」問題について、早速調査し、修正いたしましたので、ご報告いたします。
今回の修正により、一部のタグが削除されたりレベルが低下することがあります。この変更はポートフォリオ上の「更新」ボタンを押下していただくか、順々に行われる自動更新によって適用されます。
また、この修正に伴い、SCOREの値も上下する場合があります。何卒ご了承ください。
Tagsの仕組みについて
現状表示されているタグは、様々なアウトプットの中の単語を抽出して作成されています。 そして、品質を高めるために、単純に単語を抽出するだけでなく、以下の2つの機能が実装されておりました。
- (A)タグの表記ゆれを修正する機能
- (B)関連度に基づいてタグを付与する機能
しかし、今回改めて調査を進めた中で、(B)の機能が悪影響を及ぼしていることが判明いたしました。
関連度に基づいてタグを付与する機能を停止します
(B)関連度に基づいてタグを付与する機能は、例えば「Rails というタグがついているユーザーには Ruby も付与する」のように、あるタグを持つユーザーに、そのタグと関連度の高いタグを付与するという機能です。
このタグの関連度を計算するために、LAPRASでは共起関係を利用しています。 例えば、Ruby というタグがついた記事に Rails という単語が多く含まれている場合、 Rails と Ruby は関係性が高い (この場合、Ruby は Rails よりも広い概念である) と言えます。 タグと記事内の単語の共起確率を元に関連度を計算し、タグの付与を行っていました。
しかし、これにより、
- 「JavaScirpt」のタグがついている記事には「JavaScript」という単語が必ず発生していたため、JavaScirptがJavaScriptに関連しているタグであるという認識をしてしまった
- 「静岡」タグが勉強会や交流会やイベントの記事についており、「静岡」が、「イベント」「交流会」「勉強会」に関連しているタグであるという認識をしてしまった
などの、確かに共起関係にはあるものの、関連タグとして付与するには不適切な例が存在することがわかりました。 また、これら以外にも、 英単語の単数形/複数形の違いや「React」と「React.js」など、表記ゆれに対して高い関連度が設定されてしまっていることが判明しました。
「JavaScirpt」を含むこれらの表記ゆれは、上述の「(A) 表記ゆれを解消する機能」で同一のものとして対処されるべきものでしたが、処理順序が後の「 (B) 関連度に基づいてタグを付与する機能」によって再度発生してしまっていることも判明しました。
このように、「 (B) 関連度に基づいてタグを付与する機能」はノイズが多く、現時点ではこの機能によるメリットよりもデメリットが大きいため、みなさまに納得いただける精度が達成できるまで、この機能を停止することにいたしました。
LAPRASに込めた思い
LAPRASでは、データを用いたサービスを提供させていただいている以上、元データに含まれるノイズをいかに抑え、意味ある情報を抽出するかどうかが重要であると認識しております。
今回、タグに含まれているノイズを増幅させる形でみなさまに提供してしまったことは、申し訳なく思っております。 真摯に受け止めまして、これからも信頼して使っていただけるポートフォリオを目指し、引き続き技術開発・サービス開発に努めてまいります。
改めまして、ご意見ご要望をいただけたみなさま、ありがとうございました。
もしよろしければ、ぜひポートフォリオを再度ご覧いただき、更新を押して、修正されているかどうかをご確認いただけますと幸いです。
(タグの変化に伴ってSCOREの値も上下する場合がありますため、ご了承ください)
【終了しました】キャンペーンは6/15(月)までです
LAPRASにログインし、「Tags」または「Programming Languages」のテキストシェアに「#あなたの得意や好きなことに一言」とキャンペーンURLを加え、一言をつけて投稿すると松阪牛が当たるキャンペーンは6/15(月)まで実施中です。
#あなたの得意や好きなことに一言 キャンペーンが始まります
以下の4つの賞を受賞された方に松阪牛が当たりますので、ぜひご参加ください。
👑ベスト・オブ・シェア賞
上記で投稿されたツイートのうち、 最も「いいね数+RT数」の数値が大きかったツイートを投稿した方
👑改善します賞
上記で投稿されたツイートのうち、 LAPRAS社員によって「最も参考になった」ものとして選ばれたツイートを投稿した方
👑面白かったで賞
上記で投稿されたツイートのうち、 社員によって「最も面白かった」ものとして選ばれたツイートを投稿した方
👑ラッキー賞
上記で投稿されたツイートのうち、抽選でランダムに選ばれた方
キャンペーン詳細は以下の記事からご覧ください。
#あなたの得意や好きなことに一言 キャンペーンが始まります
引き続き、LAPRASをよろしくお願いいたします。