1.3K Views
October 29, 20
スライド概要
2020/10/29 Ltech#11 不動産領域のAI活用最前線 〜初完全リモート開催〜
AI戦略室データサイエンスグループ 丸山拓海
LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。
住まい探しにおける 対話AIの自然言語解析技術 AI戦略室 データサイエンスG 新卒 丸山拓海
経歴 2020年3月 長岡技術科学大学大学院 電気電子情報工学専攻 卒業 2020年4月〜 LIFULL AI戦略室 データサイエンスG 新卒入社 研究: 自然言語処理 (テキスト平易化) ● AI戦略室 データサイエンスG データサイエンスエンジニア まるやま 丸山 ● たくみ 拓海 ● Takumi Maruyama and Kazuhide Yamamoto. Extremely Low Resource Simplification with Pre-trained Transformer Language Model. Proceedings of the International Conference on Asian Language Processing (IALP 2019), Best Paper Award, pp.53-58 (2019.11) Takumi Maruyama and Kazuhide Yamamoto. Lexical Substitution is Practical for Rare Word Simplification. The 32nd Pacific Asia Conference on Language, Information and Computation (PACLIC 32), pp.437-446 (2018.12) … etc.
はじめに... ※ 辞書作りがメインの作業なので 「機械学習」の話は ほとんどありません 😖💦
はじめに... 「対話形式の住まい探し(検索)」 ができたらいいな 🤗
現在の検索形式 対話AIによる検索 (のイメージ) 賃貸と購入どちらで お探しでしょうか? 賃貸です エリアはお決まりで しょうか? 東京です. できれば, 自然豊かな ところがいいです.
対話AIによる検索 (のイメージ) 賃貸と購入どちらで お探しでしょうか? 現在の検索形式で入力可能な項目 e.g.) エリア, 間取り, 家賃, ... 賃貸です エリアはお決まりで しょうか? 現在形式では表現しにくい項目 e.g.) 自然豊かなところ, 海の近く, 〇〇駅に10分か××駅に15分くらい, ... 東京です. できれば, 自然豊かな ところがいいです.
自然言語入力で、 検索条件の幅が広がる! 対話AIによる検索 (のイメージ) 賃貸と購入どちらで お探しでしょうか? 現在の検索形式で入力可能な項目 e.g.) エリア, 間取り, 家賃, ... 賃貸です エリアはお決まりで しょうか? 現在形式では表現しにくい項目 e.g.) 自然豊かなところ, 海の近く, 〇〇駅に10分か××駅に15分くらい, ... 解析の難易度も上がる😭 東京です. できれば, 自然豊かな ところがいいです.
“ことば”で検索するために 何が必要なのか...?
“ことば”で検索するために... 人間の発話(自然言語) → 機械で解釈可能な形式 の変換が必要!
「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? 周辺環境 所要時間 交通手段 東京 30分以内 電車 こだわり条件 バス・トイレ別 連続値条件 最小値 最大値 家賃 - 70,000
難しさはどんなところに?
難しさはどんなところに? 課題1: 同じ意味でも表現は様々! ・「バス・トイレ別」, 「お風呂とトイレが別れている」, ... → こだわり条件: バス・トイレ別 ・「車1台持っているんですよね」「駐車場ってあります?」, … → こ だわり条件: 駐車場 課題2: 言葉には「曖昧さ」がある! ・「東京へのアクセスがいい」 ・「中央区で探しているんですけど」 ・「八万の物件ってありますか?」 → 東京都? 東京駅? → どこの中央区? → 八万(地名)? 家賃が八万ってこと?
難しさはどんなところに? 課題3: 単語やフレーズ同士の関係性を捉える必要がある! ・「宅配ボックスは要らないけど、オートロックと女性限定は欲しい」 キ ーワード抽出: こだわり条件 嗜好 宅配ボックス オートロック 女性限定 ? 要らない 欲しい
難しさはどんなところに? 課題1: 同じ意味でも表現は様々! 課題2: 言葉には「曖昧さ」がある! 課題3: 単語やフレーズ同士の関係性を捉える必要がある!
解析方法
解析方法 ルールベース
解析方法 ルールベース お手製辞書を作って, 辞書引きする
解析方法 ルールベース お手製辞書を作って, 辞書引きする だけの素朴な方法 🙇♂️
解析方法 Step1: キーワード・キーフレーズ抽出 ・検索条件に当てはまるようなキーワード・キーフレーズを抽出, 意味カテゴリを付与 ・お手製辞書を検索するだけ! Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」
具体的な解析手順 Step1: キーワード・キーフレーズ抽出 ・検索条件に当てはまるようなキーワード・キーフレーズを抽出, 意味カテゴリを付与 ・お手製辞書を検索するだけ! キーワード・キーフレーズ 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? 意味カテゴリ 東京 station || area 電車 transportation 30分以内 time バスとトイレが別れている kodawari 家賃7万円 rent 以下 upper
具体的な解析手順 Step1: キーワード・キーフレーズ抽出 課題1: 同じ意味でも表現は様々! ・検索条件に当てはまるようなキーワード・キーフレーズを抽出 キーワード辞書 ・お手製辞書を検索するだけ! ・キーワード辞書に加えて、言い換え辞書を利用 キーワード バス・トイレ別 意味カテゴリ kodawari 「東京まで電車で30分以内で 言い換え辞書 バスとトイレが別れている キーワード 類義語・フレーズ 家賃7万円以下の物件」 ってありますかね? バス・トイレ別 バスとトイレが別れている 辞書は合計で, 12,000エントリ (手作業, 地名+駅名は自動) → 表現の揺れを吸収 キーワード・キーフレーズ 意味カテゴリ ・「バス・トイレ別」と「バスとトイレが別れている」 東京 station || area は同じ意味であることを言い換え辞書で定義 電車 transportation 30分以内 time バスとトイレが別れている kodawari 家賃7万円 rent 以下 upper
具体的な解析手順 Step1: キーワード・キーフレーズ抽出 ・検索条件に当てはまるようなキーワード・キーフレーズを抽出, 意味カテゴリを付与 ・お手製辞書を検索するだけ! キーワード・キーフレーズ 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? 意味カテゴリ 東京 station || area 電車 transportation 30分以内 time バスとトイレが別れている kodawari 家賃7万円 rent 以下 upper
具体的な解析手順 Step1: キーワード・キーフレーズ抽出 課題2: 言葉の「曖昧さ」がある! 曖昧さを許容できる仕組み. 「駅名(station)」か「地名(area)」のどちらか! ・検索条件に当てはまるようなキーワード・キーフレーズを抽出 ・お手製辞書を検索するだけ! キーワード・キーフレーズ 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? 意味カテゴリ 東京 station || area 電車 transportation 30分以内 time バスとトイレが別れている kodawari 家賃7万円 rent 以下 upper
具体的な解析手順 Step1: キーワード・キーフレーズ抽出 課題2: 言葉の「曖昧さ」がある! 曖昧さを許容できる仕組み. 「駅名(station)」か「地名(area)」のどちらか! ・検索条件に当てはまるようなキーワード・キーフレーズを抽出 ・お手製辞書を検索するだけ! キーワード・キーフレーズ 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? 意味カテゴリ 東京 station || area 電車 ちなみに... transportation 30分以内 東京駅 time station バスとトイレが別れている 東京都 kodawari area 家賃7万円 rent 以下 upper
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper transportation station || area time 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 kodawari ってありますかね? rent upper Step1 ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」 transportation station || area 物件の周辺環境 time 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 kodawari ってありますかね? rent 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? こだわり条件 家賃の上限値 upper Step1 Step2: 規則の適用
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 kodawari ってありますかね? ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? こだわり条件
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」 transportation station || area time 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? 物件の周辺環境 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね?
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper station || area distance 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」 物件の周辺環境 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね?
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? rent upper ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? 家賃の上限値
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? rent_upper ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? 家賃の上限値
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」 transportation station || area time 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 kodawari ってありますかね? rent upper 物件の周辺環境 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? こだわり条件 家賃の上限値
具体的な解析手順 Step2: キーワードを”一定の規則”に基づいて結合・グループ化 課題3: 単語・フレーズ同士の関係性を捉える! 独自に定義した関係性の規則によって、キーワードを組み合わせる ! 例えば... ・(transportation, time) → distance ・(rent, upper) → rent_upper ・kodawari → こだわり条件 ・(station || area || building, distance) → 「物件の周辺環境」 ・rent_upper → 「家賃の上限値」 transportation station || area time 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 kodawari ってありますかね? rent upper 物件の周辺環境 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? こだわり条件 家賃の上限値
「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? Step1: キーワード抽出 transportation station || area time 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 kodawari ってありますかね? rent upper 周辺環境 所要時間 交通手段 東京 30分以内 電車 Step2: キーワード同士 規則に基づいて 結合 こだわり条件 バス・トイレ別 連続値条件 最小値 最大値 家賃 - 70,000
評価
評価 ▶︎ 対象データ ・住まいの窓口対話ログ: 100発話 (手作業で検索条件をアノテーション) 周辺環境 所要時間 交通手段 東京 30分以内 電車 「東京まで電車で30分以内で バスとトイレが別れている 家賃7万円以下の物件」 ってありますかね? こだわり条件 バス・トイレ別 連続値条件 最小値 最大値 家賃 - 70,000
評価 ▶︎ 評価尺度: Precision / Recall / F1-Score ・Entity-Level: 解析器が抽出したキーワードが正解データとどのくらい一致しているか? → Step1までの評価 ・Instruction-Level: 解析器が出力した検索条件が正解データとどのくらい一致しているか? → Step1 + Step2の評価 キーワード・キーフレーズ 東京 「東 京まで電車で30分以内で バスとトイレが別れている 家 賃 7万円以下の物件」 ってありますかね? 意味カテゴリ station || area 電車 transportation 30分以内 time バスとトイレが別れている kodaw ari 家賃7万円 rent 以下 upper 周辺環境 所要時間 交通手段 東京 30分以内 電車 こだわり条件 バス・トイレ別 連続値条件 最小値 最大値 家賃 - 70,000
評価 Entity-Level Instruction-Level Precision Recall F1-Score Precision Recall F1-Score 80.90 79.12 80.00 59.69 48.73 53.66 ルールベースのシンプルな方法でも、 かなり解析できる!
解析結果例 自然言語文 ペットと一緒に住めて、駐車場有、3LDK以上で 宜しくお願いします. 解析結果 { 'operator': 'AND', 'instructions': [ {'binary': [{'column': 'feature_info', 'value': 'ペット相談可'}, {'column': 'feature_info', 'value': '駐車場あり'}], 'continuous': [{'column': 'layout', 'lower': '3LDK'}]}] } 徒歩20分圏内に山がある静かな街がいいな. { 'operator': 'AND', 'instructions': [ {'categorical': [{'column': 'feeling', 'value': '静か'}], 'around': [{'column': 'around', 'value': '山', 'upper': 20.0, 'unit': '徒歩/分'}]}] } 宅配ボックスは要らないけど、オートロックと 女性限定は欲しい. { 'operator': 'AND', 'instructions': [{'binary': [ {'column': 'feature_info', 'value': '宅配ボックス', 'preference': 'redundant'}, {'column': 'feature_info', 'value': 'オートロック', 'preference': 'want'}, {'column': 'feature_info', 'value': '女性限定', 'preference': 'want'}]}] }
まとめ ・対話形式の検索を行うための自然言語解析技術 ・辞書引きするだけのシンプルな手法 ・キーワード抽出:80%, 検索条件: 50% の性能