2018年07月の記事一覧

前の月  ||  次の月

シカゴで開催された国際学会「IC2S2」に参加しました

こんにちは!DSOC R&Dグループの西田貴紀です。

パリで開催された国際学会「NetSci 2018」に続き、今回は7月12日〜7月15日にシカゴで開催された「IC2S2(2018: 4th Annual International Conference on Computational Social Science)」に参加してきましたので、その様子を紹介します!

Computational Social Scienceとは?

今回の学会の名称にある、「Computational Social Science」という言葉をご存知でしょうか?

おそらく多くの人が聞いたことない言葉だと思います。

「Social Science」というのは「社会科学」という意味で、人間の行動の本質を明らかにすることを目的とした学問分野を指す言葉です。具体的には、社会学、経済学、法学、教育学など、いわゆる文系として知られている学問が該当します。

「Computational」という言葉は「コンピューターによる」や「計算の」という意味で、Computational Social Scienceは日本語で「計算社会科学」と訳されています。

この言葉自体、2009年にLazerらが提唱した言葉であり、これまでの「社会科学」とは異なる、新しい学問分野の名前です。

今に始まったことではないですが、現在はあらゆるものがデジタル化・IT化されてきたことで、人の行動履歴がビッグデータとして蓄積される時代です。例えば、携帯電話などを通じて位置情報が取得されることで人の移動状況が分かったり、TwitterなどのSNSのデータを見ることで人と人のつながりや集団行動などが分かったりするなど、これまで部分的にしか分からなかったものを網羅的に把握することができるようになりました。

この技術進歩によって、簡単かつ網羅的に人の行動に関する詳細なデータを手に入れることができるようになったので、これまでの社会科学の研究では扱えなかったテーマに取り組むことができたり、実証できなかった理論を検証できたりするなど、今まで解明できなかった現象を明らかにするチャンスが訪れたのです。

従って、Computational Social Scienceとは、そういったビッグデータを用いて人間の行動メカニズムの解明を目的とした新しい学問領域のことを指します。この学問に挑戦する研究者のバックグラウンドは、社会科学だけではなく、コンピューターサイエンスや物理学といったいわゆる理系の分野も多く、文理融合の学際的な研究が行われています。

今回は、そんなComputational Social Scienceの分野で最も大きな国際学会であるIC2S2に参加し、先月に投稿したNetSci 2018の参加レポートで紹介した転職の研究についてポスター報告をしてきました。

本レポートでは、IC2S2で聞いた基調講演の中から印象的だったものを紹介します!

Twitterの情報伝播を予測する

今回の基調講演は、合計12人の有名な研究者によって行われました。こちらのウェブサイトで、当日の映像を見ることができます。

その中でも最も興味深かった、マイクロソフトの研究者であるDuncan Watts氏が「Contagion on Social Networks」というテーマで話された講演の内容を紹介したいと思います。

Duncan Watts氏は、Stanley Milgram氏が提唱した「6次の隔たり」という仮説を数理的に研究したことで有名です。「6次の隔たり」とは「世界中の誰かは、知り合いの知り合いという関係を6ステップ経由すればつながることができる」というStanley Milgram氏が実験で発見した結果のことをいいます。

今回、Duncan Watts氏はTwitterのデータを使用し、社会ネットワークにおいて人づてに情報が急激に伝播していくという「カスケード現象」を分析した結果を中心に報告し、Computational Social Scienceの本質に迫るプレゼンテーションを行いました。

「カスケード現象」とは、例えばある商品の普及を考えたとき、初めは緩やかにその商品を購入する人が増えていきますが、ある閾値を超えた瞬間に急激に商品が社会に普及していくといった現象のことを指します。今回のDuncan Watts氏の発表テーマにもある「Contagion」とは「伝染・感染」という意味で、人が周囲の影響を受けて行動を起こしていくさまを病気の伝染・感染となぞらえており、そのContagionのメカニズムの一つとしてカスケード現象があります。

IMG 4556 1 - シカゴで開催された国際学会「IC2S2」に参加しました

Duncan Watts氏はTwitterのデータを用いて、あるツイートが大量にリツイートがされて情報が伝播していくような現象をカスケード現象として、その現象の大きさを予測しました。予測に当たり、ユーザーのフォロー/フォロワー数、ツイート内容など、利用できる限りの特徴量を用いた予測モデルを作成しました。その結果、先行研究でのパフォーマンスよりも良い結果を残すことができましたが、カスケード現象の大きさの変動の半分以下しか説明できませんでした。また、過去にどれだけリツイートされたかという一つの変数を用いた単純なモデルの性能と全ての特徴量を加えた複雑なモデルの性能に大きな差がないことも示しました。

さらに、Twitterのデータを再現するようなネットワークを生成し、「そのネットワーク上で情報が伝播される様子を理論的に予測できるのか」ということをシミュレーションしていますが、そのシミュレーション結果からも、十分な予測はできず、予測には限界があることが示されていました。

これらの結果から、Duncan Watts氏はカスケード現象のような複雑な社会現象を予測するには限界があることを示唆しました。Twitterの利用可能なデータは、データの量と正確性において、他のドメインのデータと比較しても質が高いデータといえます。もちろん、これから利用できるようなデータが出てくる可能性や、より良いモデルを作成できる可能性も否定できませんが、Twitterのような質の高いデータにおいても十分な予測ができないということから、他の社会現象についても同様に予測には限界があるのではないかという結論を導いています。「予測ができない」という理由は、何かしらのメカニズムで説明できるような決定論的なものがあるだけでなく、ランダムに決まる要素が多い現象であるからです。

最近は、「ディープラーニング、AIを活用すれば何でも予測できる」と言わんばかりのニュースが散見されますが、こと社会現象においてはその予測にも限界があるということをDuncan Watts氏は主張していました。

Computational Social Scienceが解くべき問いとは?

Duncan Watts氏の話については、実証研究から導いた結論も興味深かったのですが、最後に今後Computational Social Scienceが挑戦すべき問いについて言及され、その内容にハッとさせられました。

彼は、今後Computational Social Scienceが目指すべき方向性として、コンピューターサイエンスの視点から「予測の限界を示し、その限界の性質を明らかにすること」を挙げています。具体的には、各社会現象ごとに限界を求めてみたり、既存の技術の制約を加味し、実務的にはどれくらいが限界なのかを明らかにしたりすることです。

IMG 4567 1 - シカゴで開催された国際学会「IC2S2」に参加しました

社会科学の立場からは「現象のメカニズムを理論化するだけでなく、どれだけ理論でその現象を説明・予測できるのかを示すこと」を掲げています。昨年の石川善樹さんとの対談でも触れましたが、科学の役割の一つに限界を示すことがあります。例えば、19世紀にカルノーという物理学者は、エンジンの燃焼効率には「限界」があることを証明しました。このカルノーの証明によって、開発中のエンジンが「100点満点中何点か?」ということを定量化することができるようになった結果、開発者たちがどこを目指せばいいかが分かるようになり、エンジンの性能が大幅に改善されてきたという歴史があります。

この話と同様に、人の行動のメカニズムを明らかにすることを目的とした社会科学においても、コンピューターサイエンスの立場から示された限界を基にして、やるべきことが明確になるはずです。例えば、もし限界にまだまだ到達していないパフォーマンスであるならば、そこにはこれまでに解明されていない行動のメカニズムがあるということなので、新しい理論を考える余地が残されているはずです。一方で、限界に達している状態であるならば、そもそも行動のメカニズムは分からない、もしくは既存の理論以上にできることはないことを意味します。限界を示すことで挑戦するべきことが明確になり、さまざまな社会現象から効率的にそのメカニズムを解明していくことができるようになることが期待されます。

以上のことから、Computational Social Scienceの本質は、ただビッグデータを使って社会科学の理論を検証するだけでなく、コンピューターサイエンスが限界を示し、その限界を元にして社会科学の視点からさまざまな角度で理論を考えていくというサイクルを通して、社会現象の謎を解明し、その知見を豊かな社会の実現に活用していくことにあると思いました。

学会に参加する前は「Computational Social Scienceは、ただデータのサイズが大きくなった以外にこれまでの社会科学とどういった違いがあるのだろうか?」という疑問を抱いていた私にとって、その答えが明確になったという点で、Duncan Watts氏の基調講演はとても有意義なものでした。互いの強みを生かし、コンピューターサイエンスと社会科学が融合して、効率的に社会課題を解決していくことにワクワクし、私もこの流れに乗って豊かな社会の実現に貢献していきたいと思いました。

アメリカのスケールの大きさに圧倒!

Duncan Watts氏の基調講演は志が高く、スケールの大きいワクワクする話でしたが、学会の開催地であるノースウエスタン大学もまたスケールの大きい素晴らしい大学でした! その壮大なキャンパスの一部を紹介したいと思います!

まず、晴れた日はホテルから学会の会場まで徒歩で移動していたのですが、キャンパスは自然にあふれていてとても心地良かったです。緑があるだけでなく、そこにはかわいいうさぎもいて、とても癒されました。毎朝、最高の散歩をしながら会場に向かいました。

IMG 4537 3 - シカゴで開催された国際学会「IC2S2」に参加しました

キャンパス内の植物も大学のカラーである紫に統一されていて、こだわりを感じました。

IMG 4507 1 - シカゴで開催された国際学会「IC2S2」に参加しました

IMG 4657 1 - シカゴで開催された国際学会「IC2S2」に参加しました

学会の会場であるGlobal Hubという場所に着くと豪華な朝食が用意されています! フルーツが豊富に用意されており、毎日健康的な朝食を取ることができました。五大湖のひとつであるミシガン湖がキャンパスに隣接しているので、食堂から美しい景色を眺めながら優雅な朝食タイムを過ごしました。

IMG 4661 1 - シカゴで開催された国際学会「IC2S2」に参加しました

IMG 4517 1 - シカゴで開催された国際学会「IC2S2」に参加しました

午前中に基調講演や研究発表を聞いて、ランチタイムなどの休憩時間にはキャンパスを散歩してリフレッシュしていました。ミシガン湖のほとりには、恋人たちが誓いをペイントする風習があるようです。また、ガールズたちが水着を着て水遊びをしていたりしたので、ここは本当に大学なのかと思いました(笑)!

IMG 4588 1 - シカゴで開催された国際学会「IC2S2」に参加しました

学会が終わり、夜はアメリカらしさを感じられる料理を食べに行きました。アメリカといえば肉! ということで、ホテルの人からお薦めしてもらった、おいしい肉料理のお店でポークチョップを食べたり、分厚い生地が特徴のシカゴピザを食べたりしました。朝は健康的な食事を取っていたので、罪悪感なく楽しめました(笑)!

IMG 4505 1 - シカゴで開催された国際学会「IC2S2」に参加しました

IMG 4719 1 - シカゴで開催された国際学会「IC2S2」に参加しました

ミシガン湖のほとりなど、散歩に適した場所があるだけでなく、キャンパス内に自由に運動できるジムもあり、研究に疲れたらリフレッシュできる環境が整っていて、間違いなく研究がはかどるだろうと感じ、「それは素晴らしい研究がたくさん生まれるな」と妙に納得してしまいました(笑)。

おわりに

今回、SansanはIC2S2のブロンズスポンサーとして学会運営を支援し、参加者の方にはノベルティーグッズを配布させていただきました。

ノベルティーグッズとしては、日本らしさをアピールしたいこととちょうど開催時期が夏だったということもあり、DSOCのプロジェクト「Sansan Data Discovery」のうちわをこの学会のために用意しました!

IMG 4520 2 - シカゴで開催された国際学会「IC2S2」に参加しました

ランチタイムを外で過ごす参加者の方も多く、30度近い気温だったこともあってか、うちわを使ってくれている方がいて、うれしかったです! さらに、ポスター報告の際に、自己紹介した時には「あのうちわの会社だね!」と声を掛けていただくこともあり、Sansan Data Discoveryというプロジェクトを世界中の優秀な研究者に広めることができました!

パリでの学会に引き続き、私たち自身の研究について、たくさんの有益なアドバイスをいただきました。正直、学会前は今の研究がつまずきかけているのかなとモヤモヤしていたところもありましたが、今回その悩みを解決する意見をいただくことができて、今は希望しか見えていません! 引き続き、Computational Social Scienceのあるべき形を模索しながら、研究成果を私たちのサービスに組み込み、世界を変えるような出会いを演出できるように、日々研究に精進していきます!

執筆者プロフィール

text: DSOC R&Dグループ 西田貴紀
2018/07/31

【つながりに効く、ネットワーク研究小話】vol. 1「切れやすいつながりの見つけ方」

DSOC研究員の前嶋です。

先日、Eightのオウンドメディア『BNL』で、社会的ネットワークについての解説記事を書かせていただきました。この連載では、もう少しカジュアルな形で「つながり」に関する小話をしていこうかと思います。

今回は、「切れやすいつながりの見つけ方」について解説します。

例え、どれだけ価値ある出会いをしても、いつの間にか相手と疎遠になってしまうことはよくあることです。もし、切れやすいつながりと、そうでないつながりを見分ける術があれば、どの人との関係性をより重んじるべきかの判断がしやすくなるのではないでしょうか。

つながりの「構造」による「切れやすさ」

実は、つながりの「切れやすさ」と、社会的ネットワークの「構造」の間には、密接な関係があることが知られています。重要なのは、そのつながりが「橋渡し的なつながり」なのか、それとも「結束的なつながり」なのかという見方です。「橋渡し的なつながり」とは、つながっていない人同士を架橋するようなつながりのことを指します。一方で、「結束的なつながり」とは、自分がつながっている人同士もまたつながっている、という密なつながりのことを指します。

橋渡し的なつながりは、自分が属するコミュニティーとは別のコミュニティーとの接点を持つことができるので、さまざまな情報がそれを通って入ってくるという利点があります。ビジネスパーソンにとって、このようなつながりは非常に重要です。社会科学では、何らかの利益をもたらしてくれるつながりのことを「社会関係資本(ソーシャル・キャピタル)」と呼びます。

しかし、橋渡し的なつながりは、利益をもたらす一方で、消失するのも速いということが実証されています(Burt 2002)。研究によると、ある投資銀行の内部のネットワークにおいて、橋渡し的でないつながりは翌年に77%が消失していたのに対して、橋渡し的なつながりは90%が消失していました。理由としては、橋渡し的つながりでつながっている人同士はお互い異なる性質を持っていることが多く、コミュニケーションコストが高くなってしまうということや、つながりに関与する人が少数であることなどが挙げられます。資本は利益を生みますが、その維持管理にはコストがかかるものです。

つながり続ける方法

では、橋渡し的なつながりをできるだけ失わないために、何ができるでしょうか。二つの戦略があります。一つは、消失を相殺するほど多くの橋渡しを築くこと、もう一つは橋渡し的なつながりをより長く維持することです。優れた業績を持つ銀行家ほど、橋渡し的なつながりを維持しているという分析結果もありますが、どちらの戦略を選ぶべきかは、その人の職種や環境、あるいは好みによるところが大きいと考えられます。

もし、ある出会いに対して価値があると思った時は、その人は自分の知り合いとも知り合いだろうか? と自問して、それが橋渡し的なつながりだと判断される場合は、積極的にその人とコミュニケーションを取って、関係をメンテナンスするのがよいでしょう。

個人向け名刺アプリ「Eight」はFacebookなどの他のSNSに比べて「橋渡し的つながりのためのSNS」という側面が強いですが、価値ある出会いを失わないためにも、必要とあれば積極的にケアすることが重要です。そのための一つの基準として、今回紹介したようなネットワーク構造について考えてもらえれば嬉しく思います(もちろん、人と人との関係は完全にコントロールすることはできませんが)。

次回は「つながりと性格の深イイ関係」という題で書きます。

参考文献

Burt, R. S. (2002). Bridge decay. Social networks, 24(4), 333-363.

text: DSOC R&Dグループ 前嶋直樹
2018/07/24

【Techの道も一歩から】第11回「言語処理でのちょっとした前処理」

こんにちは。DSOC R&Dグループの高橋寛治です。

形態素解析や系列ラベリングの際の素性抽出などでは、いつも似たようなコードを書きがちです。

今回はその作業を減らすための備忘録として、これらのちょっとした前処理について紹介します。

形態素解析

日本語を対象にした自然言語処理における形態素解析とは、単語分割と品詞付与を指しています。

日本語は単語に分かち書きされていないため、ほとんどのタスクの前段となる非常に重要な処理です。

Pythonで日本語形態素解析を行う際には、MeCabやPure PythonのJanomeがよく使われるかと思います。

私は、MeCabのPython 3バインディングであるmecab-python3をよく使います。

シンプルなインタフェースでMeCabの形態素解析機能がPythonで利用可能です。

まずは、mecab-python3を用いて形態素解析を行い、得られた形態素列をPythonで取り扱いやすいように加工します。

こんな感じで使いたい

以下のように、形態素解析や品詞による単語のフィルタリング、カタカナ語抽出などを手軽に使いたい、と妄想を膨らませて実装を進めます。

# 形態素解析器をインポート(tokenizer.pyのTokenizerクラス)
from tokenizer import Tokenizer

# 解析インスタンス作成
tok = Tokenizer()

# 解析
morphemes = tok.tokenize("言語処理で形態素解析は重要なプロセスだ。")

# 名詞だけ取り出す
nouns = [m for m in morphemes if m.pos == "名詞"]
print(nouns)
>>> [言語, 処理, 形態素, 解析, 重要, プロセス]

# カタカナだけ取り出す
katakanas = [m for m in morphemes if m.is_katakana]
print(katakanas)
>>> [プロセス]

解析クラスと形態素クラスが必要になりそうなことが見えてきました。

形態素クラスを作る

形態素クラスを作成し、morpheme.surface のように表層形や品詞に簡単にアクセスできるようにします。

IPADicを使った場合の例です(辞書を変更する場合は、辞書の属性情報(self.features)の内容に合わせてインスタンス変数を定義します)。

class Morpheme:
    def __init__(self, node):
        self.surface = node.surface
        self.features = node.feature.split(",")

        self.pos = self.features[0]
        self.pos_s1 = self.features[1]
        self.pos_s2 = self.features[2]
        self.pos_s3 = self.features[3]
        self.conj = self.features[4]
        self.form = self.features[5]
        self.orig = self.features[6]

        if len(self.features) < 8:
            self.reading = None
            self.reading2 =None
        else:
            self.reading = self.features[7]
            self.reading2 = self.features[8]

    def __str__(self):
        return self.surface

    def __repr__(self):
        return self.__str__()

__str____repr__は定義しておくことで、print(morpheme)した際にそれらの戻り値が表示されるようになります。

Morphemeクラスにメソッドを追加しないのであれば、以下のようなnamedtupleを利用するのもいいと思います。

IPAMorpheme = namedtuple("IPAMorpheme", "surface pos pos_s1 pos_s2 pos_s3 conj form base reading1 reading2")

Morphemeクラスとすることで、例えば以下のような属性を追加して、後段の素性抽出の際に容易に利用可能です。

ただし、一つひとつのインスタンスがたくさんのメソッドを持つことになるため、素性抽出時に判定する処理を用意したほうが軽量でいいかもしれません。

@property
def is_katakana(self):
    return regex.fullmatch(r"^\p{Katakana}+$", self.surface) is not None

上記メソッドで利用しているregexモジュールはUnicode文字プロパティー(例えば\p{Katakana})が標準モジュールreと同等のインターフェースで使うことができて非常に便利です。

形態素解析するクラス

用意した形態素クラスに形態素解析結果を代入する処理を作成します。

Tokenizerクラスを作成し、tokenizeメソッドを作成します。

import MeCab


class Tokenizer:
    def __init__(self, mecab_args):
        self.__tagger = MeCab.Tagger(mecab_args)
        self.__tagger.parse("Initialize")

    def tokenize(self, sentence):
        return [morpheme for morpheme in self.__parse_to_tag(sentence)]

    def __parse_to_tag(self, sentence):
        node = self.__tagger.parseToNode(sentence)
        node = node.next
        while node.next:
            yield Morpheme(node)
            node = node.next

MeCabインスタンス作成時の引数を渡すことで、ユーザー辞書といった情報を利用できます。

形態素解析クラスを用いてscikit-learnでTF-IDF

上記で準備した形態素解析クラスを用いて、名詞をTF-IDFで重み付けします。

scikit-learnのインターフェースとTF-IDF

scikit-learnではTfidfVectorizerでTF-IDFが提供されています。

scikit-learnはインターフェースが統一されており、fitは与えられたデータに対してモデルの学習を行い、transformfitで得たモデルを用いて入力を変換します。

predictfitで得たモデルを用いて推定を行います。

TF-IDFの場合はfitでTF-IDF計算のための語彙辞書作成やIDFの計算を行い、transformではfitで作成した重みを使い、与えられたデータに対してTF-IDF値を計算して返します。

TfidfVectorizerでTF-IDF値を取得

TfidfVectorizerは分かち書きされたテキストの入力が前提となっているため、tokenizer引数で分かち書き処理を加えます。

tokenizerはcallableを受け付けるため、以下のようなtokenizerをラップする関数を作成します。

以下の例では、分かち書きをしつつ、名詞のみを返しています。

def tokenize_with_filter(text):
    morphemes = tok.tokenize(text)
    return [m.surface for m in morphemes if m.pos == "名詞"]

作成した関数を利用してTfidfVectorizerでTF-IDFベクトル化します。

from sklearn.feature_extraction.text import TfidfVectorizer

# 例文は青空文庫から引用
docs = [
    '吾輩は猫である。名前はまだ無い。',
    '親譲の無鉄砲で小供の時から損ばかりしている。',
    '公然と名前が云えないくらいな男だから、弱虫に極まってる。'
]

# TF-IDF値を計算
vectorizer = TfidfVectorizer(tokenizer=tokenize_with_filter)
vectors = vectorizer.fit_transform(docs)

# docsのTF-IDF計算の対象となる語彙を表示
print(vectorizer.vocabulary_)
>>> {'吾輩': 3, '猫': 8, '名前': 2, '譲': 10, '無鉄砲': 7, '供': 1, '時': 6, '損': 5, '云': 0, '男': 9, '弱虫': 4}

# docsのTF-IDF値を表示
print(vectors.toarray())
>>> 

このようにTfidfVectorizerに対してtokenizerを設定することで、かなり自由度高く入力単語列を調整することが可能となります。

系列ラベリングの素性抽出

形態素列を系列と見なして、形態素列にラベル付けするという方法がよく用いられます。

例えば、固有表現抽出や品詞付与で用います。

素性として推定対象の形態素の前後数単語の表層形や品詞を取り扱うことがよくありますが、if文で書くと素性の追加や削除はコードの編集が多くなり、やや面倒です。

テンプレートを用いて簡単に調整可能にします。

テンプレートを使った素性抽出

「素性ラベル名、素性抽出関数、対象単語からの相対的な位置」をテンプレートとして素性抽出することを考えます。

例えば、対象単語より2単語前の単語の表層形を取得するテンプレートは、(“word-2”, lambda x: x.surface, -2)と定義します。

固有表現抽出を例に挙げて説明します。

以下の表は、「午前8時に東京駅で集合する。」という文を形態素解析し、IOB2(Inside-outside-beggining)タグ形式で固有表現のラベルを付与したものです。

43df8b77ae08f65baa8ace315c8b6996 760x570 - 【Techの道も一歩から】第11回「言語処理でのちょっとした前処理」

ここで、「東京」という単語を例に素性抽出します。

素性には、対象単語と前後2単語の表層形、対象単語と前後2単語の品詞、推定済みの前2単語のIOB2タグを利用するとします。

あるラベルを学習する際の素性は、Pythonの辞書形式で表すと以下のようになります。

{
    "word-2": "時",
    "word-1": "に",
    "word": "東京",
    "word+1": "駅",
    "word+2": "で",
    "pos-2": "名詞",
    "pos-1": "助詞",
    "pos": "名詞",
    "pos+1": "名詞",
    "pos+2": "助詞",
    "iob-2": "I-TIME",
    "iob-1": "O"
}

テンプレートと素性抽出を行う関数を定義します。

# 素性抽出のための関数
word_feature = lambda x: x.surface
pos_feature = lambda x: x.pos
iob2_feature = lambda x: x.iob2

# テンプレート
templates = [
    ("word-2", word_feature, -2), ("word-1", word_feature, -1), ("word", word_feature, 0), ("word+1", word_feature, 1), ("word+2", word_feature, 2),
    ("pos-2", pos_feature, -2), ("pos-1", pos_feature, -1),("pos", pos_feature, 0), ("pos+1", pos_feature, 1), ("pos+2", pos_feature, 2),
    ("iob2-2", iob2_feature, -2),  ("iob2-1", iob2_feature, -1),
]

定義したテンプレートと系列を入力し、テンプレートに従って素性を抽出する関数を書きます。

def iter_feature(tokens, templates):
    tokens_len = len(tokens)
    for i in range(tokens_len):
        # Bias項を入れて頻出するものが優先されないようにする
        feature = {"bias": 1.0}

        # テンプレートを適用
        for label, f, target in templates:
            current = i + target
            if current < 0 or current >= tokens_len:
                continue
            # テンプレート作成対象の場合に、素性抽出関数を適用
            feature[label] = f(tokens[current])

        # BOSとEOSを素性に加える
        if i == 0:
            feature["BOS"] = True
        elif i == tokens_len - 1:
            feature["EOS"] = True

        # 素性をイテレート
        yield feature

実際に素性を抽出し、scikit-learnの学習で利用できるように変換します。

# 素性の抽出
features = []
for tokens in corpus:
    features.extend(iter_feature(tokens, templates))

from sklearn.feature_extraction import DictVectorizer

# scikit-learnで素性が入力できるように辞書形式の素性を数値列に変換
feature_vectorizer = DictVectorizer()
vector = feature_vectorizer.fit_transform(features)

テンプレートを使って推定

学習したモデルで推定する際に、テンプレートを適用して同じように素性を抽出する必要があります。

推定されたラベルを用いて次のタグを推定するようなモデルの場合を考えます。

for token, feature in zip(tokens, iter_feature(tokens, templates)):
    # 素性抽出
    vec = feature_vectorizer.transform(feature)
    # tokenのiob2変数に推定値をセットする
    token.iob2 = label_encoder.inverse_transform(model.predict(vec))[0]

label_encoderは推定するラベルをscikit-learnで利用できるように数値化したものです。

学習時に保存しておく必要があります。これにより学習済みモデルで推定した数値化されたラベルをもとのラベルに戻します。

上記例では、それぞれのiob2インスタンス変数に推定されたIOB2タグが格納されます。

よく使うことを整理してすばやく実装する

似たような処理を整理することで、作業を開始しやすくなります。

もしかするとモジュール化してGithubで管理しておくことで、pip install git+https://github.com/hogehoge_user/mymoduleにより爆速で前処理環境を整えることができるかもしれません。

次回からは、言語処理でのアルゴリズムついて紹介していきたいと思います。

執筆者プロフィール

※ 本連載の続きは、「Sansan Builders Box」で読むことができます。

過去記事

▼第10回
言語処理でのちょっとしたデータ確認やクレンジング

▼第9回
「API GatewayとAWS Lambda PythonでAPI開発」 Vol. 4:デプロイ

▼第8回
「API GatewayとAWS Lambda PythonでAPI開発」Vol. 3:エラー処理

▼第7回
「API GatewayとAWS Lambda PythonでAPI開発」Vol. 2:ローカルでの開発環境構築

▼第6回
「API GatewayとAWS Lambda PythonでAPI開発」Vol. 1:API GatewayとAWS Lambdaを知る

▼第5回
快適なシェル環境の再構築を自動化する

▼第4回
第16回情報科学技術フォーラム(FIT2017)で登壇

▼第3回
第11回テキストアナリティクス・シンポジウム

▼第2回
R&D論文読み会勉強会

▼第1回
言語処理100本ノック勉強会

text: DSOC R&Dグループ 高橋寛治
2018/07/17

創業11周年を迎えました。創業記念パーティーレポート

皆さま、こんにちは。

人事部の素花(そばな)です。今回、初めてブログに記事を投稿します。

創業11周年を迎えました

5人から始まったSansan株式会社は、2018年6月11日に創業11周年を迎えました。創業12年目に入り、今や400名を超えるメンバーが在籍する組織となりました。

私は2016年に入社をしたのですが、この2年だけでもかなり多くの仲間が増えています。これからまた、Sansanがどれほど成長するのだろうか、そんなことを考えながら日々ワクワクしています。

毎年6月は、恒例の創業記念パーティー!

社員の有志が企画し、Sansanの恒例行事の一つとなっている、創業記念パーテイー。年々、クオリティーが上がっていて、今年も楽しい企画で大いに盛り上がりました!

そこで今回は、先日行われた創業記念パーティーの様子を少しだけお見せしちゃいます。

DSC0167 1 - 創業11周年を迎えました。創業記念パーティーレポート

パーティー会場は、表参道ヒルズ!

日本だけでなく、海外拠点からも社員が一同に集結! こんなにも多くの社員が一カ所に集まることはなかなかありません。

偶然にも、創業記念パーティーが開催された6月15日は、2018 FIFAワールドカップの開幕翌日ということで、今年のテーマは「ワールドカップ」! 会場では、Sansan事業部とEight事業部のサッカー対決が始まりました。

DSC8440 760x507 - 創業11周年を迎えました。創業記念パーティーレポート

DSC8544 1 - 創業11周年を迎えました。創業記念パーティーレポート

DSC8654 760x507 - 創業11周年を迎えました。創業記念パーティーレポート

ワールドカップを意識した演出に、一同大盛り上がり!

YAM8713 760x507 - 創業11周年を迎えました。創業記念パーティーレポート

DSC8867 760x507 - 創業11周年を迎えました。創業記念パーティーレポート

この日は仕事を忘れて楽しみました。

パーティーには、家族や子どもを連れてきている社員も多く、楽しそうに遊んだり、時間を過ごしている様子があちらこちらで見られました。家族も一緒に参加できるイベントがたくさんあることも、Sansanのいいところなんですよね!

Sansanは、12年目という新たな道へ、また一歩足を踏み出しました。

「ビジネスの出会いを資産に変え、働き方を革新する」というミッションの下、これからも変わらず成長し続けていこうと、気持ちが改めて引き締まった素花でした。

text: 人事部 素花玲香 photo: 山平敦史
2018/07/12

Sansanユーザー限定イベント「Sansan User Garden」を開催

こんにちは。カスタマーサクセス部の細川です。

6月21日(木)、東京・表参道ヒルズにてSansanユーザー限定イベント「Sansan User Garden」を開催しました!

約300名にも上る、法人向けクラウド名刺管理サービス「Sansan」利用するユーザーの皆さまにご来場いただき、Sansanからはカスタマーサクセス部やプロダクト開発部のメンバーが40名ほど参加しました。

今回は、イベント当日の様子をレポート形式でお届けしたいと思います。

DSC0438 - Sansanユーザー限定イベント「Sansan User Garden」を開催

当日に受付をしていたスタッフは、全員カスタマーサクセス部のメンバーたちです!

Sansan User Garden

クラウド名刺管理サービス「Sansan」の導入支援やアカウントマネジメントなどを行う、カスタマーサクセス部から日頃の感謝を込めて、約300名のSansanユーザーの皆さまをご招待いたしました。カスタマーサクセス部が開催するイベントとしては、この規模での実施は初めてでした。

YAM9147 - Sansanユーザー限定イベント「Sansan User Garden」を開催

来場者へのノベルティーは、当日のコンテンツであった落語にちなんで、オリジナルの「座布団」と「扇子」を用意しました。

Sansan User Gardenは、2018年春からスタートしたプロジェクト「Sansan in 表参道」とも連動し、イベントの開催日前後の表参道ヒルズの館内はSansanでラッピングされていました!

DSC0140 - Sansanユーザー限定イベント「Sansan User Garden」を開催

第一部

冒頭のあいさつとして、最初に登壇させていただいたのは、カスタマーサクセス部で部長を務める小川泰正。小川からは、本イベントの主旨やSansanの今後の取り組みについて話をさせていただきました。

YAM9075 - Sansanユーザー限定イベント「Sansan User Garden」を開催

冒頭であいさつをする小川。

小川のあいさつに続いて登壇させていただいたのは、6月1日からCTO(最高技術責任者)に就任した藤倉成太。開発ロードマップとして少し未来のSansanの機能について、話をさせていただきました。

YAM9107 - Sansanユーザー限定イベント「Sansan User Garden」を開催

CTOの藤倉。

また、シニア・データサイエンティストであり、テクニカル・エヴァンジェリストを務める大隅智春からは、名刺のデータ化に関する未来やAIについての話をさせていただきました。

YAM9124 - Sansanユーザー限定イベント「Sansan User Garden」を開催

シニア・データサイエンティスト、テクニカル・エヴァンジェリストの大隅。

後半には、大隅に加えて、Sansanの開発などを担当するプロダクト開発部のメンバーたちもステージに上がり、担当業務などについて一人ずつ紹介をさせていただきました。

DSC0571 - Sansanユーザー限定イベント「Sansan User Garden」を開催

Sansanのプロダクトマネジャーが一人ずつ、開発を担当する機能などについて話をしました。

そして、第一部の最後には、落語家の柳家三三(やなぎや・さんざ)師匠に登場いただき、新作落語を披露していただきました。

そうです! 師匠のお名前を見て、気付かれた方もいらっしゃるかと思いますが、師匠には「さんさん(Sansan)」つながりで本イベントにお越しいただきました!

師匠の落語で会場の雰囲気も温かくなったところで、そのまま第二部へと進みます。

第二部

第二部は、Sansanユーザーの皆さまによる懇親会です。

懇親会には、第一部で登壇した藤倉や大隅、プロダクト開発部のメンバーも参加し、ユーザーの皆さまからSansanの活用方法についての質問や機能開発の要望、期待のお声などをたくさんいただきました。

DSC0764 - Sansanユーザー限定イベント「Sansan User Garden」を開催

Sansanのヘビーユーザー様に乾杯のご発声をいただきました!

DSC0889 - Sansanユーザー限定イベント「Sansan User Garden」を開催

YAM9136 - Sansanユーザー限定イベント「Sansan User Garden」を開催

カスタマーサクセス部のメンバーたちも懇親会に参加。たくさんのユーザー様と交流させていただきました。

DSC0787 - Sansanユーザー限定イベント「Sansan User Garden」を開催

DSC0854 - Sansanユーザー限定イベント「Sansan User Garden」を開催

表参道ならではのフードを用意。さまざまなドリンク類とともに提供しました。

また、懇親会では、イベントに参加いただいた企業のご担当者様へインタビューも行いました。

ステージに上がっていただいたユーザーの皆さまには、それぞれの目的に応じたSansanの活用方法や利用時の工夫、課題、今後の展望などについて、お話をいただきました。

ご協力いただいた皆さま、誠にありがとうございました!

DSC0812 - Sansanユーザー限定イベント「Sansan User Garden」を開催

Sansanの導入効果や管理者としての苦労などについて、話をおうかがいしました。

会場では、Sansanの新サービスである「Sansan Customer Intelligence」のブースも展開しました。たくさんのユーザーの方々にお立ち寄りいただくことができ、大盛況でした。

DSC0881 - Sansanユーザー限定イベント「Sansan User Garden」を開催

Sansan Customer Intelligenceについて寄せられた疑問に、専門のチームに所属するメンバーがしっかりと答えます。

嬉しいお声をたくさんいただきました

イベント終了後には、ユーザーの皆さまから「プロダクトについて直接要望が伝えられてよかった」「他社の活用が聞けて参考になった」など、嬉しいお声をたくさんいただきました。

また、参加したSansanのメンバーからも「普段なかなかお話することができないユーザーの皆さまとお話できたことが嬉しかった」という声が多く寄せられ、今後につながるような素敵なイベントになったと思います。

今後のカスタマーサクセス部

カスタマーサクセス部では、今後も活用方法の発信やユーザーの皆さまが交流を深められるようなイベントを企画・実施していく予定です。

今後ともSansanのカスタマーサクセス部をよろしくお願い致します!

DSC0796 - Sansanユーザー限定イベント「Sansan User Garden」を開催

text: Sansan事業部カスタマーサクセス部 細川千尋 photo: 山平敦史
2018/07/05

パリで開催された国際学会「NetSci 2018」に参加しました

お久しぶりです! DSOC R&Dグループの西田貴紀です!

どうして私がDSOCに?!」という連載記事を書かせていただいてから早1年が経ちました。連載の最後に、研究成果を報告できるように精進すると約束しましたが、ついにその約束を果たす時が来ました!

6月11日〜6月15日にフランス・パリで開催されたネットワーク分析の国際学会である「NetSci 2018」にてポスター発表をしてきました。今回は、その様子をレポートさせていただきます!

e460312b90bf96f6cfc9dfc1b1f67085 - パリで開催された国際学会「NetSci 2018」に参加しました

NetSciとは?

NetSci 2018とは、Network Science Societyが主催する、ネットワーク分析に関する研究者たちが集う国際学会です。

Network Science Societyのメンバーには、「弱い紐帯の強さ(弱いつながりの強さ)」で有名なMark Granovetterをはじめ、スモール・ワールド・ネットワークの研究で有名なDuncan J. WattsやSteven H. Strogatzといったトップ研究者の方々が在籍しています。

本学会の参加人数は、例年500〜600名程度でしたが、今年の開催地がパリだったこともあってか、なんと過去最高の791名が参加し、この分野では最大の国際学会となり、大いに盛り上がりました。

今回、「Sansan Data Discovery」という共同研究プラットフォームにて、予防医学博士の石川善樹さんが率いる私たちの研究チームが取り組んでいる転職に関する研究が、こちらの学会にポスター発表としてアクセプトされましたので、NetSci 2018に参加してきました。

「弱いつながり」は転職に有効なのか?

まずは、簡単に私たちの研究について紹介します。

1973年に社会学者であるMark Granovetterが提唱した「弱い紐帯の強さ(弱いつながりの強さ)」という転職にまつわる理論があります。この理論は、友人や家族といった密にコミュニケーションを取り合う「強いつながり(紐帯)」よりも、知人やたまにしか会わないような人との「弱いつながり(紐帯)」が転職する際には重要であるというものです。

そのメカニズムは、「弱いつながり」に当たる人は自分がいつも交流するコミュニティーと異なるコミュニティーに所属している可能性が高いため、そのつながりを通して入手できる目新しく有益な情報が転職に有効になるケースが多いというものです。

つまり、「弱いつながり」というよりも「コミュニティーを橋渡しするようなつながり」から有益な情報が入りやすいということが、Mark Granovetterの理論の本質なのです。

Mark Granovetterが提唱してから、さまざまな実証研究が世界中で取り組まれてきました。その結果は必ずしも理論通りとはならず、「強いつながり」の方が転職には影響を与えているといった研究結果もあるのが現状です。

私たちは、この理論をEightで捉えられるビジネスネットワークのデータを利用して実証しました(分析に当たっては、ある一定期間においてEightを利用していたユーザーについて、プロフィールデータに含まれた一部の情報と名刺交換履歴を匿名化し、Eightの利用規約で許諾を得ている範囲で使用しています)。

その結果、理論とは異なり、コミュニティー内に閉じるような「強いつながり」を持つ人の方が転職する傾向にあることが分かりました。

最近の研究結果では、私たちと同様に情報の更新頻度が高いようなケースでは「強いつながり」の方が有益な情報を得やすいことが示されていたり、LinkedInのデータを用いた研究では「弱いつながり」は職業紹介のみに有効であり、「強いつながり」は内定の受諾までに有益であることを示していたりしています。

私たちは、これらを踏まえ、今日の情報が溢れており整理することが難しいような時代においては「強いつながり」から得られる転職によるミスマッチをなくすような情報の方が重要になっているのではないかという解釈をしています。

具体的にどのように情報の質が異なるのかなど、まだまだ明らかにできていないことも多いのですが、今回のポスター発表では多くの人と議論することで、今後の研究を進める上でのヒントを得ることができました。

私自身、初めての国際学会かつポスター発表でしたが、海外の方とのディスカッションはこれまでしてきたものとは異なり、意見をほとんど否定せずに建設的にコメントし合う印象を受けました。

そういった雰囲気もあってなのか、次に試してみたい分析案や研究テーマが浮かびやすく、知的好奇心が刺激される最高に楽しい時間となりました!

研究の詳細を知りたい方は、こちらで展示したポスターと研究紹介動画をチェックすることができます。

IMG 4361 1 - パリで開催された国際学会「NetSci 2018」に参加しました

1番面白かった研究をご紹介!「出会う前に親友と分かるのか?」

今回の学会では、面白い研究発表がたくさんされていました! 日本に帰ってきてからも論文を整理しながら、論文をいくつか読んでいますが、まだまだ終わりが見えません(笑)!

その中でも特に印象に残ったMITメディアラボのEsteban Moro客員教授の研究を紹介したいと思います。

彼らの研究チームには、中長期的な経済発展を実によく予測するという「経済複雑性指標」を開発しているMITメディアラボのCesar Hidalgo准教授の名前もあり、発表の前から気になっていました。

彼らの研究発表は、”How did you meet your best friend?”と題され、前述したいわゆる「強いつながり」は誰かと出会う前に分かるのかという問いを検証したものでした。ネットワーク分析では「リンク予測」という「誰と誰がネットワーク上でつながるのか?」という、この分野では典型的な問題があります。彼らはその問いになぞらえて「誰と誰が強いつながりで結ばれるのか?」という問いを設定して、通話履歴のデータを使用して分析をしていました。

彼らは、性別や年齢といったデモグラフィックな変数、同じコミュニティーに所属しているかなどのネットワークの構造に関する変数、そして地理的距離を変数として「誰と誰がつながるのか?」というリンク予測タスクと「誰と誰が強いつながりで結ばれるのか?」という2つのタスクに取り組みました。具体的には、つながりができるまでの100日間のデータを用いて、つながりができてから50日間で計測される通話回数をつながりの強さの尺度としています。

その結果、「誰と誰がつながるのか?」というタスクは約90%の正解率だったのに対して、「誰と誰が強いつながりで結ばれるのか?」という約60%の正解率しか得られませんでした。つまり、ネットワークから将来どういったつながりになりうるのかは、十分に予測できないということになります。

IMG 4198 2 1 - パリで開催された国際学会「NetSci 2018」に参加しました

この結果を解釈するならば、出会ってからのコミュニケーションがその後の関係性を決めている可能性が高いようです。SNSなどでは、つながるべき人がレコメンドされる時代であり、出会う前に出会うべき人が分かる可能性もありますが、どのように出会うのか、どのように関係を構築していくのか、というのことも重要であると解釈できる結果が印象的でした。

IMG 4199 2 1 - パリで開催された国際学会「NetSci 2018」に参加しました

パリは何もかもが最高だった!

これまでパリを訪れたことはなく、ファッション好きな私にとっては憧れの都市でもあったので、学会が終わった夕方から街に出かけて少しだけ観光も楽しんできました! 特に食とファッションについて、印象的だったものを紹介したいと思います。

まず食ですが、RESTAURANT A.Tでのディナーを紹介したいと思います。日本人の田中淳シェフのレストランで、「色彩」を生かして食材だけでなく食器も合わせて完成される、色鮮やかでアート作品のような料理をいただきました。次から次へと色鮮やかな料理が出てきて、おいしいのはもちろんのこと、まるでファッションショーを見ているような気分になり最高でした! 特に印象的だったのは、檜のアイスです。黒のモードな服が好きな自分にとっては、無彩色のアイスの見た目と檜の香りにもモードを感じたので、今回の出張で食べた中で一番お気に入りの料理となりました。

IMG 4128 1 - パリで開催された国際学会「NetSci 2018」に参加しました

続いて、ファッションです。こちらは、運良くマルタン・マルジェラの回顧展が行われており、じっくりと見てきました。

マルタン・マルジェラはベルギー出身のデザイナーで、アントワープ・シックスと呼ばれるベルギーの有名デザイナー陣と同時期に注目を浴びたデザイナーです。こちらのブランドは、私の大好きなコムデギャルソンに影響を受けており、足袋ブーツ、エイズTシャツ、ペンキをデザインに取り込んだアイテムなどが有名です。今回は1989年から2009年までのコレクションが展示されており、足袋ブーツなど有名なアイテムが展示されていて、感動してテンションが上がりました! この回顧展に完全に影響され、翌日の学会終了後にはラファイエットというデパートに直行し、大学1年生の時からずっと欲しかった足袋ブーツを購入してしまいました。マルジェラについてもっと語りたいところですが、収集がつかず、ファッションレポートになってしまうため、この辺りで自重します(笑)。

IMG 3937 2 - パリで開催された国際学会「NetSci 2018」に参加しました

食とファッションだけではなく、パリに到着した瞬間からその街並みの雰囲気に魅了され、パリにいるだけで最高な気分になりました。

加速するSansan Data Discovery

NetSci 2018は、これまでに参加した学会の中で最も知的好奇心を刺激され、これから業務で活用できる分析手法や知識を獲得できましたので、最高の出張となりました。世界中には優秀な研究者がたくさんいて、自分も負けていられないという気持ちになりましたし、そういった研究者の方々とコラボレーションできるようにSansan Data Discoveryも推進していこうと強く心に誓いました。

この勢いのまま、7月12日からは米国・シカゴで開催されるIC2S2(2018: 4th Annual International Conference on Computational Social Science)という国際学会にもブロンズスポンサーとして協賛し、同様にポスター発表もしてきます!

次回の国際学会レポートもお楽しみに!

執筆者プロフィール

text: DSOC R&Dグループ 西田貴紀
2018/07/03