【エントリー部門】
アプリケーション部門
【応募者属性】
社会人/インターン
【応募者名】
チーム名 kobaski@UK
- Pablo Molina Gonzalez (Intern)
- Hiro Kobashi
【エントリー作品のURL】
https://www.hayesendroad.net/dixiter
(Google Chromeで動作確認しています)
(証明書エラーは無視ください)
Dixitのカードがないと楽しく遊べないので、念の為にVideoもアップロードしておきます。(字幕あり)
- Tell: https://youtu.be/wOS1Rl95JLA
- Choose: https://youtu.be/YGgPSwkQyqk
- Guess: https://youtu.be/JVzS8k9gJqs
【エントリー作品の権利指定】
クリエイティブ・コモンズ・ライセンス
【利用しているオープンデータ】
- DBPedia
- Wikidata
【利用しているパートナーリソース】
LOD4ALL: 株式会社富士通研究所
【エントリー作品の詳細説明】
本アプリケーションはDixitをPlayするロボットをLODを使って実現するものです。
Dixitは仏Libellud社のカードゲームであり、2008年に登場以来、数多くの賞
を受賞しています。ゲームのルールは以下のようにとても簡単で、子供でも遊
ぶことができるものです。
1. 参加者がDixitのカードを山札から一枚ずつ、計6枚取得します
2. 参加者の一人が親(Storytellerと言います)となり、手持ちのカードの中か
ら一枚を選んで、それを表す文(sentence)を言い、そのカードを場に伏せ
て出します
3. Storyteller以外の参加者は、Storytellerが言ったsentenceに近いカード
を手持ちのカードから選んで、場に同様に伏せて出します
4. Storytellerは出されたカードをシャッフルしてから表を向けます
5. Storyteller以外の参加者は、場にあるカードの中からStorytellerのカー
ドを推測し、投票します
6. 投票結果により、次のように加点されていきます
- 「全員がStorytellerに投票」もしくは「全員がStoryteller以外に投票」
の場合:
- Storyteller以外の人、全員に 2 点
- 上記以外:
- StorytellerとStorytellerのカードを選んだ人に 3点
- 特別加点:
- 自身のカードに投票があった場合: 1点*投票数
このターンを繰り返し、誰かが30点に達するか山札がなくなるまで続け、獲得
点数を競います。
このゲームの面白いところは、
「あるカードに関して、"そこそこ外れたsentence"を中心にゲームが進む」
ところです。
例えばStep 2では、Storytellerはあまりにも具体的なsentenceを選んではい
けません。なぜなら他の参加者が、全員自分のカードに投票してしまい、得点
を得られないからです。一方、全然関係の無いsentenceも選べません。これも
同様に得点の対象外だからです。Storytellerは少なくとも1人の人にカードを
選んでもらえるようなsentenceを言わなければならないのです。
またStep 3やStep 5では、それぞれ手持ちのカードもしくは場にあるカードか
ら、Storytellerの言ったsentenceをもとに、一枚のカードを選択しなければ
なりません。Step 3では、そのsentenceに近いカードを場に出すことで、他の
参加者の投票ミスによる加点を狙います。Step 5では、sentenceから
Storytellerのカードに投票することで、得点を得ることができます。
この応募アプリケーションDixiterは
- LODを使ってそこそこ外れたsentenceを選ぶ
- LODを使ってsentenceからカードを選ぶ
ことを実現しています。
次に、それぞれの実現方式について簡単に説明をします。
### LODを使ってそこそこ外れたsentenceを選ぶ
この局面では、Storytellerは場に出したカードのためのsentenceを選ぶこと
が求められます。先に述べたように、そのsentenceはカードの内容からそこそ
こ外れたものである必要があります。
これをDixiterでは、LODを使って以下のようにそこそこ外れたsentenceを選び
ます。
1. カードにExactにマッチするKeywordsを幾つか選択
2. そのKeywordsに関するResourceをLOD4ALLから取得
3. 取得したResourceを起点に、例えば rdfs:seeAlso などを複数回辿るクエ
リをLOD4ALLに問い合せ、その先の rdfs:label を取得
4. 取得した rdfs:label から1つの rdfs:labelを選び、sentenceとする
ここの肝は「rdfs:seeAlso などを複数回辿る」ことにより、Dixiterは、もと
もとExactなキーワードであったものを、ある程度暈すところです。これによ
り元の意味をある程度保ちつつ、sentenceを外れさせることを実現しています。
また、rfs:seeAlso以外にもskos:relatedやdbo:followsなども有効です。
### LODを使ってsentenceからカードを選ぶ
この局面では、Storyteller以外の人が
- Storytellerが言ったsentenceに近いカードを手持ちのカードから選択
- 場にあるカードの中からStorytellerのカードを推測
を求められます。
このためにDixiterは、以下のようにして、カードを選択・推測します
1. 対象となっているカード1枚1枚に関して、「LODを使ってそこそこ外れた
sentenceを選ぶ」と同じ動作でsentencesを抜き出す
2. Sentencesの中にStorytellerのものがあれば、それと紐付いているカード
を選択
3. なければ、カードに関連したsentenceとStorytellerのsentenceをwordに分
解し、word2vecのVectorで近さを評価して、Storytellerのsentenceに近い
wordを持っているカードを選択
このような手順でDixiterは、LODを使ってStorytellerの思考を辿ろうと試み
ます。
以上のようにして、DixiterはLODを使って動作しています。
Update: Feb 1, 2016
(hiro kobashi)