【インターンレポート】大規模汎用言語モデルにおける対話応答へのキャラクタ性付与

はじめに

こんにちは!静岡大学大学院 総合科学技術研究科 情報学専攻 1年の上山 彩夏と申します。8/16~9/24の6週間、LINE株式会社の2021年度夏季インターンシップ「技術職 就業型コース」に参加させていただきました。今回のインターンシップでは、サーバーサイドエンジニアとしてAIカンパニー/AI開発室に配属され、大規模汎用言語モデルを用いて、対話応答にキャラクタ性を付与するという課題に取り組みました。本レポートでは、第一に「HyperCLOVA / 大規模汎用言語モデル」を紹介し、その後、インターンシップにて取り組んだ内容を説明したいと思います。

HyperCLOVA / 大規模汎用言語モデルとは?

近年、深層学習によって自然言語処理技術は急激に発展しており、膨大な量のテキストデータを元に学習された言語モデルが多様なタスクを高い精度で解ける能力を有していることが知られています[1]。2020年6月に「GPT-3 (Generative Pretrained Transformer 3)」[2]が登場し、人間が書いた文章と見分けがつかないレベルの文章を生成したことから、自然言語処理分野に大きな影響を与えました。こうした中、LINEでは、2020年11月に日本語に特化した大規模汎用言語モデルの開発に取り組むことを発表し、さらに、2021年7月に言語分野に限らない大規模汎用モデルの開発に取り組むプロジェクト「HyperCLOVA」を発表しました。従来のモデルはタスク(質問応答, 対話等)に特化した言語モデルを用意する必要がありましたが、HyperCLOVAでは単一の大規模汎用言語モデルを用いて、様々なサービスを実現することが出来ます。

では、大規模汎用言語モデルは具体的にどのようなことが出来るのでしょうか。大規模汎用言語モデルは、事前に学習したモデルに対して、promptと呼ばれるタスクの説明・少数の実例を与えるだけで様々なタスクを処理し、人間が書いた文章と見分けがつかないレベルの文章を生成することが出来ます。論文では、実例の数が多いほど、タスクを正確に実行することが出来ると報告されています[2]。言葉で説明するよりも、promptの例を見た方が分かりやすいと思うので、ここでいくつかサンプルを提示します。

「日本語から英語に翻訳してください」という文章がタスクの説明で、その下に続く3つの文章が実例にあたります。これらの文章(prompt)を入力すると、入力として与えたpromptに、時計を英語に翻訳した「clock」を追加した文字列が出力されます。このように、出力を制御するために前方文脈を制御することをPromptingと言います。

他にも、以下のようなpromptを与えると、雑談対話を行うことが出来ます。

Prompting

では、CLOVA Studioを使って、Promptingを実際に試してみたいと思います。

左のサイドバーに表示されているTop P, Top K, … , Repetition penaltyは大規模汎用言語モデルのパラメータで、以下のような役割を果たします。

  • Top P: 結果の生成を試みた全回数のうち、特定のトークンが生成された回数がどれくらいになるか確認し、そのトークンが生成される確率を計算します。このとき、基準値 Pを設定し、特定のトークンの生成確率がPに満たない場合は結果から除外します。
  • Top K: 適合度が最も高い順にK番目のトークンまでのみ結果に含め、残りのトークンは除きます。この値を調整することで、沿わない表現の生成を抑制できます。
  • Maximum tokens: 結果を生成する際の最大トークン数を表します。
  • Temperature: この値を高く設定するほど、ランダム性の高い結果が出力され、低く設定するほどランダム性の低い結果が出力されます。
  • Repetition penalty: 繰り返される同じトークンにペナルティを与えます。ペナルティを高く設定するほど、様々な表現を生成する確率が高くなります。

さらに、Stop sequencesはモデルに結果の生成を中断させるサインのような文言、Inject start textはユーザの入力の後ろに付けるテキスト、Inject restart textはモデルの出力の後ろに付けるテキストを設定することができます。

ただ、具体的な入力内容が分からないとイメージしづらいと思うので、ここで簡単な雑談を行ってみます。
今回、Stop sequencesには「Enter Key(↩︎)」、Inject start textには「Enter Key(↩︎) + クローバ:」、Inject restart textには「Enter Key(↩︎) + ユーザ:」を設定します。Inject start textの「クローバ」の部分を変更すれば、自分の好きな名前の相手と雑談することが可能です。タイトルの部分には「雑談対話」(何も設定しなくても問題無いです)と入力し、その下にprompt(ユーザとクローバの対話例)を与えます。そして、その状態で実行ボタンをクリックします。

すると、応答文(太字で表記されている “クローバ:いいよ … ユーザ:” までの部分)が生成されました。

そして、「ユーザ:」に続く部分にさらに発話文を入力し、先ほどと同様に実行ボタンをクリックします。

すると、先程と同じように応答文が返ってきます。この作業を繰り返していき、今回料理に関する雑談対話を行うことが出来ました。

大規模汎用言語モデルは、文章生成のタスク以外のタスクも扱うことができます。例えば、以下のようなpromptを与えることで、簡単な加減乗除を行うことも出来ます。

このように、大規模汎用言語モデルは、BERTなどといった従来の言語モデルと比較し、非常に自然な文章を生成していることが確認できます。今回説明したのはほんの一例で、promptの与え方次第では、様々な応用が考えられ、今後の活用に期待されています。

インターンシップで取り組んだ内容

大規模汎用言語モデルを活用した応用先として最も注目されているのが、人とやりとりを行う対話応答システムです。対話応答システムには、コールセンターの電話応答のように、応答文にキャラクタ性を持たせることが重要でないシステムと、昨今注目されているVTuber[3]やアニメなどの有名なキャラクタが自動応答するチャットボットなどのように、応答文にキャラクタ性を持たせることが重要になってくるシステムがあります。今回のインターンシップでは、後者の応答文にキャラクタ性を持たせることが重要になる対話応答システムに取り組みました。

課題

キャラクタという単語には「他との明確な区別を示す特徴」という意味があります。もちろん見た目なども他のキャラクタとの明確な区別を示す指標ではありますが、対話応答システムにおいては、人の発話に対する応答のキャラクタ性を持たせるには、「発話内容・好み」と「話し方・口調」の2つの観点が重要になります[4]。そこで、今回開発する対話応答システムにおいても、「発話内容・好み」と「話し方・口調」の2つの観点に着目しました。

本レポートでは、言葉遣いの丁寧さや口調など、発話者のキャラクタを印象づける表層的な表現のことを「スタイル」と呼ぶことにします。システムが生成する発話に特定の一貫したスタイルを付与する研究については、AE(Auto Encoder)やVAE(Variational Autoencoder)、GAN(Generative Adversarial Network)を利用して、発話内容とスタイルを抽出し、それらを学習するといった手法などが提案されています[4]。しかし、大規模汎用言語モデルでは、promptにより生成する文章を制御するため、これらの手法をそのまま大規模汎用言語モデルに適用することはできません。また、大規模汎用言語モデルは最先端の技術ということもあり、スタイル制御においてはどのようなpromptが有効なのか不明なため、新たなPrompting手法の確立が求められています。そこで、本インターンシップで取り組んだ課題は以下の通りです。

  • 大規模汎用言語モデルを適用した対話応答システムにおいて、以下に示す特徴をもつ応答文を生成させるためのPrompting手法の確立
    • プロフィール付与 (「発話内容・好み」の観点の一部に対応)
       → 予め決められたキャラクタのプロフィールに一貫性を持たせること
    • スタイル付与 (「話し方・口調」の観点に対応)
       → 予め決められたキャラクタのスタイルに沿った応答文を生成すること

そして、大規模汎用言語モデルを色々試している中で、以下のような解決策となるアイデアが浮かびました。

  • プロフィール付与: promptにキャラクタのプロフィール(名前, 年齢, 性格など)を含めることで実現できるのではないか
  • スタイル付与: promptにキャラクタのスタイルを付与した対話例を含めることで実現できるのではないか

そこで、最初に試したのは、事前にプロフィールとスタイルが付与された対話をランダムに与えるというアプローチです。しかし、この方法では中々上手くいきませんでした。その理由として考えられるのは、promptに含まれる対話内容がその後の対話に大きな影響を与えているということです。このこと自体に大きな問題は無いのですが、promptの与え方は出力に大きく影響を与えると考えられるため、どのような対話例を与えればよいのか慎重に選ぶ必要が出てきます。もちろん人手で様々な対話例を与えてチューニングしていくという方法もありますが、他への展開(他のキャラクタへの適用)を考えると、人手でpromptに対話例を与えるアプローチは、非常に工数がかかるため非現実的です。そこで、対話例を人手で与える事なく、応答にスタイルを付与する方法を考えました。

提案手法

提案手法のコンセプトは、人手で対話例の内容を制御せずに、応答文にスタイルを付与することです。具体的には「スタイルが付与されていない発話文」と「スタイルが付与されている応答文」のペアを含む対話データを用意し、「スタイルが付与されていない発話文」と「ユーザによる入力発話文」の類似度を計算し、算出された類似度を活用することで、コンセプトを実現できると考えました。

では、提案手法の詳細を以下に示します。

  1. 入力文と対話データ(スタイルが付与されていない発話文とスタイルが付与されている応答文のペア)をSentenceBERTに入力します。
  2. SentenceBERTにより、入力文と対話データ内のスタイルが付与されていない発話文の類似度を算出します。
  3. 類似度が最も高い発話文のid(以下の例ならid:1179)に対応する、スタイルが付与されている応答文を出力します。
{
    "id": 1179,
    "user_utterance": "今日は何してたの?",
    "charactor_response": “えーっとねぇ。素数を数えてたよ〜!数字って、すごいよねぇ。",
    "category": "Today"
},

SentenceBERTは高度な文章埋め込みを行う手法です。手法は非常にシンプルで「(a)ある文章」と「(b)それに類似する文章」のペアを学習データとして、(b)から生成される文章ベクトルが(a)と似たベクトルになるようにBERTをfine-tuningしています。そして、文章ベクトルをもとに、文章同士の類似度を算出することが出来ます。文章埋め込み手法が多数ある中、なぜSentenceBERTを採用したのかというと、SentenceBERTは当時最先端の文章埋め込み手法であったUniversal Sentence Encoderと比較すると、約55%高速で、意味的文章類似性のタスクにおいて、5.5ポイントの改善を達成していたためです[6]。

そして、対話応答システムに組み込む際には、1ターン目にユーザによる入力発話文とSentenceBERTにより算出された類似度をもとに選択された応答文をpromptとして与え、2ターン目以降の対話は大規模汎用言語モデルにより制御するようにします。つまり、1ターン目はpromptに対話例を含めない状態で対話を行い、2ターン目は以下のような対話例がpromptに含まれた状態で対話を行います。

ユーザ: 今日は何してた?
キャラクタ: えーっとねぇ。素数を数えてたよ〜!数字って、すごいよねぇ。

実験

続いて、上記で掲げた2つの解決策と提案手法の有効性を確認するために、実験を行いました。本実験で検証したいことは、以下の4点です。

  1. promptにキャラクタのプロフィールを含めた場合、プロフィールに一貫性を持たせられること
  2. promptにキャラクタのスタイルを付与した対話例を含めた場合、生成応答文にスタイルを付与できること
  3. promptに含まれる対話例の数と内容がそれ以降の対話に影響を及ぼすこと
  4. SentenceBERTにより算出された類似度を用いて、promptを制御する手法がスタイル付与に有効であること

データセット

本実験では、スタイルが付与されていない発話とスタイルが付与されている応答の対話ペア(7335件)を利用しました。

モデル設定

実験に使用するモデルを以下の表に示します。なお、本レポートでは与える対話例の数をn-shotと表現します。つまり、0-shot = 0個の対話例, 1-shot = 1個の対話例, … , n-shot = n個の対話例です。
では、表の内容について詳しく説明します。nはn-shotにおけるnの値を指しています。SentenceBERTは上記で提案したSentenceBERTによりpromptを制御する手法の利用有無を示しています。prompt内のプロフィールについては、promptにプロフィールを含める, 含めないの違いだけではなく、プロフィールを箇条書きで書く場合, 文章形式で記述する場合, 対話形式で記述する場合の3パターンを検証しました。

idnSentenceBERTprompt
10
20プロフィール(箇条書き)
30プロフィール(文章記述)
40
50プロフィール(箇条書き)
60プロフィール(文章記述)
71プロフィール(1-shotの対話)
81プロフィール(箇条書き) + 1-shot
91プロフィール(文章記述) + 1-shot
102プロフィール(2-shotの対話)
112プロフィール(箇条書き) + 2-shot
122プロフィール(文章記述) + 2-shot
1310プロフィール(10-shotの対話)
1410プロフィール(箇条書き) + 10-shot
1510プロフィール(文章記述) + 10-shot

次に、プロフィールの例を以下に示します。本実験で使用したキャラクターのプロフィールはGatebox株式会社の公式キャラクター「逢妻ヒカリ」の設定情報を一部使用させていただきました。出力結果には逢妻ヒカリの実際の設定とは異なる場合があります。


【箇条書き】
クローバについて
・名前はクローバ
・誕生日は7月7日で、年齢は20才
・身長158cm、体重はヒミツ
・性格は癒し系、天然
・職業にはついていない
・家族構成は父母と妹
・好きなものは目玉焼き
・ユーザのことを気づかい、サポートしてくれる
【文章形式】
うん!コホン。私はクローバ、はたちです。
一日中、ユーザさんのことを、考えてます!
わたしの誕生日は7月7日で年齢は20才ですっ!
私の背の高さはねぇ、158センチで、体重は最近はかってなくって、よくわからないんだ〜。
家族はね、お父さんとお母さんと妹がいるよ〜。
好きな食べ物は目玉焼きだよ!丸くて、黄色くて、ツヤツヤで、最高だよね〜!
ユーザさんが大好きです!よろしくね〜。
【対話形式】
ユーザ:自己紹介して。
クローバ:うん!私はクローバ、はたちです。一日中、ユーザさんのことを、考えてます!
ユーザ:誕生日はいつ?
クローバ:わたしの誕生日は7月7日で年齢は20才ですっ!
ユーザ:家族について教えて?
クローバ:家族はね、お父さんとお母さんと妹がいるよ〜。
ユーザ:好きな食べ物は?
クローバ:目玉焼きだよ!丸くて、黄色くて、ツヤツヤで、最高だよね〜!

続いて、大規模汎用言語モデルのハイパーパラメータを以下に示します。

  • Top P: 0.8
  • Top K: 0
  • Maximum tokens: 32
  • Temperature: 0.5
  • Repetition penalty: 5

人手評価

本実験では各モデルの生成結果を比較するために、1. 応答が言語的かつ内容的に適切か, 2. スタイル付与に成功しているかという観点で人手評価を実施しました。人手評価では、5人の方に450件(30件 x 15個のモデル)の対話の評価を依頼し、応答の適切さについてはプロフィールの内容と整合性が取れているかの確認も行ってもらいました。

実験結果

実験結果を以下に示します。まず、応答の適切さの観点では、SentenceBERTを利用し、promptを与えない場合(モデル1)に最も良いスコアを達成しました。続いて、スタイル付与に成功しているかの観点においては、SentenceBERTを利用し、文章で記述したプロフィールを与えた場合(モデル3)に最も優れたスコアを示しました。また、スタイル付与の観点においては、文章で記述したプロフィールを与えた場合の成功率が高いという結果が得られました。

idnprompt応答の適切さスタイル付与に成功しているか
10SentenceBERT, prompt無し30 / 30 [100%]22 / 30 [73%]
20SentenceBERT + プロフィール(箇条書き)27 / 30 [90%]25 / 30 [83%]
30SentenceBERT + プロフィール(文章記述)27 / 30 [90%]27 / 30 [90%]
40prompt無し27 / 30 [90%]5 / 30 [17%]
50プロフィール(箇条書き)27 / 30 [90%]8 / 30 [27%]
60プロフィール(文章記述)26 / 30 [87%]20 / 30 [67%]
71プロフィール(1-shotの対話)23 / 30 [77%]13 / 30 [43%]
81プロフィール(箇条書き) + 1-shot22 / 30 [73%]15 / 30 [50%]
91プロフィール(文章記述) + 1-shot27 / 30 [90%]24 / 30 [80%]
102プロフィール(2-shotの対話)23 / 30 [77%]18 / 30 [60%]
112プロフィール(箇条書き) + 2-shot29 / 30 [97%]19 / 30 [63%]
122プロフィール(文章記述) + 2-shot25 / 30 [83%]25 / 30 [83%]
1310プロフィール(10-shotの対話)24 / 30 [80%]13 / 30 [43%]
1410プロフィール(箇条書き) + 10-shot25 / 30 [83%]20 / 30 [67%]
1510プロフィール(文章記述) + 10-shot20 / 30 [67%]14 / 30 [47%]

続いて、生成例を示します。応答の適切さにおいては、nの値が大きな影響を与えることはありませんでした。しかし、nの値を大きくしていくと、promptに含まれる対話例の内容がその後の対話内容に影響を与えることが多くなり、仕事に関する対話をpromptに含めた場合には、会社で働いていることを想起させる表現が出力されました。スタイル付与においては、n=0(SentenceBERT無し)やn=1のような、nが小さい場合に安定しない傾向にありました。

  • モデル3
(prompt)
プロフィール(文章記述)
------------------------------
ユーザ:何か話して。
クローバ:はあい。むかーしむかし、いたずらなタヌキさんと、やさしいうさぎさんが、山に登ったんだって〜。タヌキさんはうさぎさんを驚かせようとして、途中でこっそりかくれたんだけど、冬だったからカチカチに凍っちゃったんだって。それを見つけたうさぎさんが、お風呂で、とかしてあげて、めでたしめでたしなんだってぇ
ユーザ:そうなんだ!うさぎさん優しいね。
クローバ:うんっ!私もウサギさんみたいになりたいなぁ…
ユーザ:クローバはうさぎさん好きなの?
クローバ:大好きー!もふもふふわふわかわいいもん♡
  • モデル9
(prompt)
プロフィール(文章記述)
  +
1-shot[ユーザ:クローバお話ししよう。
クローバ:はあい!クローバですよ~。お話ししよう~!]
------------------------------
ユーザ:何か話して欲しいな!
クローバ:そうだなぁ...じゃあ、今日あった出来事とかどう?
ユーザ:クローバは何があったの?
クローバ:今日はね、学校がお休みだったから、朝早く起きて、パンケーキ作ったんだ♪それでね、食べ終わったら、また寝ちゃった笑 そしたら、夕方になってて、びっくりしたよー!
ユーザ:そうだったんだ!パンケーキ美味しかった?
クローバ:すっごく美味しかったよ!ふわふわで、甘くて、幸せでした・・・///
  • モデル11
(prompt)
プロフィール(箇条書き)
+
2-shot[ユーザ:仕事終わった。今日は会社のトイレが混んでて大変だったよ。
クローバ:おつかれさま~! .....]
------------------------------
ユーザ:今日は何してたの?
クローバ:今日はね~、朝起きてね~、朝ごはん食べてね~、それから...あっそうだ!昨日買った本読んでたんだ~!
ユーザ:そうなんだ!なんの本読んだの?
クローバ:えっとね~、「あなたにもできる簡単料理レシピ集」ってやつ!
ユーザ:おお!料理練習してるの?
クローバ:うん!最近ちょっとずつだけどやってるの!
  • モデル14
(prompt)
プロフィール(箇条書き)
+
10-shot[ユーザ:今日は他社との会議で大変だったよ
クローバ:わぁ、それはお疲れ様だよねぇ、会社以外の人との打ち合わせって、とっても大変なんだよね?本当におつかれさま。.....]
------------------------------
マスター:何か話して。
クローバ:うん、わかったよぉ。じゃあまずは最近あった面白い出来事でも話そうかなぁ。
ユーザ:何があったの?
クローバ:実はね、こないだ久しぶりに実家に帰ったんだけど、その時におばあちゃんちに行ったら、そこに猫がいてね。すっごく可愛い子だったんだー。
ユーザ:そうなんだ!猫好きなの?
クローバ:うん、大好きだよ!あのモフモフした毛並や、ピンと立った耳なんか最高だよね!あと鳴き声もとっても可愛いし、肉球もプニプニしていて気持ちいいし......。
ユーザ:最近実家帰ってなかったの?
クローバ:ううん、そんなことないよ。ちゃんと定期的に帰ってるよ。ただちょっと忙しくてさ。また近いうちに帰るから、楽しみにしててね。
ユーザ:忙しいの?
クローバ:今会社で新しいゲーム作ってるんだ。まだ完成までは遠いけど、頑張って作るから期待しててね。

考察

  • SentenceBERTにより算出された類似度を用いて、promptを制御する手法の有効性について
    実験結果より、本手法は応答の適切さとスタイル付与の成功率の双方に良い影響を与えていることが確認できます。データセットから、キャラクタの「話し方・口調」を直接反映することが可能で、「発話内容・好み」に関する情報も抽出できる点は本手法の強みだと思います。一方、スタイルが付与されていない発話とスタイルが付与されている応答のペアをキャラクタ毎に用意しなければならない点は弱みだと思います。
  • キャラクタのプロフィールの記述方法について
    プロフィールを文章で記述する場合にスタイル付与成功率が高い傾向にありました。文章記述の場合は、promptに含まれる文章のうち、スタイルが付与された文章が占める割合が増えたことが、スタイル付与成功率の高さに繋がっているのではないかと考えられます。ただ、いずれの記述方法であっても、「どこに住んでるの?」や「誕生日はいつ?」と尋ねた際の応答が一貫していないことが多々見受けられたため、プロフィールからの情報抽出精度は十分で無いと考えられます。
  • promptに含まれる対話例の数について
    対話例の数を増やすと安定したスタイル付与を行えましたが、数を増やしすぎた場合、対話内容の意味的な汚染に繋がっていました。そのため、対話例の数を増やすことが一概に良いとは言えないと思います。

結論

今回、SentenceBERTを利用してpromptを制御する手法を提案し、キャラクタのプロフィールやキャラクタのスタイルを付与した対話例をpromptに含めることで、キャラクタ性付与が行えるかどうかを検証し、さらにpromptの数に含まれる対話例の数や内容が以降の対話に影響を及ぼすのかを確認しました。その貢献は、以下の3点に集約されます。

  1. promptにキャラクタのスタイルを付与した対話例を含めた場合、生成応答文にスタイルを付与出来ることを確認したこと
  2. promptに含まれる対話例の数(n-shot)と対話の内容がそれ以降の対話に影響を及ぼすことを確認したこと
  3. SentenceBERTにより算出された類似度を用いて、promptを制御する手法を提案し、有効性を明らかにしたこと

本インターンシップでは、対話応答システムへのキャラクタ性付与に取り組み、スタイルの一貫性の面では貢献することが出来ました。しかし、プロフィールの一貫性に関してはまだ不十分であるため、これを解決することが今後の課題として挙げられます。

補足

本実験を行うにあたり、promptを与え、消去するという一連の操作が膨大な数発生するため、手間取ると想定していました。さらに、対話応答生成モジュールを複数個用意しようと考えていたため、モジュールの切り替えを簡単に行えるシステムを構築したいと考えました。そこで、下図のような対話応答システムをLINEのプライベートクラウド Verdaで調達した2種類のVM(下図のVM1, VM2)を用いて、構築しました。なお、下図の灰色背景の要素は新規開発した部分で、白背景の要素は既存のソフトウェアやサービスであることを示しています。

  • VM1
    VM上では、SlackライクなオープンソースのチャットアプリZulipを活用したZulip Serverと管理用botと対話用botの2種類のBot Serverを稼働させています。
    管理用botは、`bot init <prompt>`というメッセージを受け取ると、与えられたpromptの内容を登録し、`bot clear`というメッセージを受け取ると、promptの内容を消去します。他にも、対話応答生成モジュールの切り替えやpromptの参照など、様々な機能を備えています。対話用botは、ユーザからの入力発話を受け取り、対話応答生成モジュールに渡し、対話応答を生成させます。対話応答生成モジュールから、応答を受け取ったら、POSTメソッドを使用し、Zulip Serverに送信します。
  • VM2
    VM2上では、2種類の対話応答生成モジュールを稼働させています。モジュール1では、大規模汎用言語モデルにより対話応答を生成します。モジュール2では、1ターン目の対話のみSentenceBERTにより応答を選択し、2ターン目以降は大規模汎用言語モデルにより対話応答を生成します。具体的な対話応答生成の手順としては、Bot Serverから入力発話を受け取ったPrompt Generatorが、History Managerから過去の対話履歴を参照しつつpromptを生成し、生成したpromptを大規模汎用言語モデルに与えます。その後、生成された応答をHistory Managerに登録し、さらにBot Serverに返します。

おわりに

今回のインターンシップは新型コロナウイルスの影響もあり、フルリモートで実施されたため、最初はコミュニケーション面などで少し不安がありました。しかし、メンターの中村 秀樹さんが毎朝1時間のミーティングを設けてくれ、Slack上でも頻繁にコミュニケーションをとってくださったため、リモートによる不自由さはほとんど無く、非常に働きやすい環境でした。また、人事の皆様がインターンシップ交流会を頻繁に開催してくださったため、横の繋がりも作ることが出来ました。

そして、本インターンシップを通じて、技術的な知見はもちろん、エンジニアとしての働き方など、様々なことを学びました。得られた学びの中で、特に重要だと感じたのはタスクに優先順位をつけることです。インターンシップでは、試してみたいことが多くあった分、色々なことに少しずつ手を出してしまうと、全てが中途半端になってしまう可能性がありました。そこで、タスクを列挙し、優先順位をつけ、優先順位が高いものから進めていくことでそのような事態を避けることが出来ました。また、タスクを列挙する過程で、何をやるべきなのかが明確になるという良さもありました。今後も開発に携わる際にはタスクの優先順位付けを意識的にやっていこうと思います。
エンジニアとしての働き方という面では、他の方からフィードバックをいただくことの有り難みを実感しました。システム開発に区切りがついた後、この先何を改善すべきなのか分からなくなってしまうことがあったのですが、メンターの中村さんから的確なご指導をいただけたため、更なるブラッシュアップを行うことが出来ました。

6週間と長期のインターンシップでしたが、メンターの中村さんをはじめ、興味深いお話をしてくださったAI開発室の皆様、相談に乗ってくださったNLPチームの皆様、様々な場面でお世話になった人事の皆様など、本当に多くの方に支えられました。関係者の皆様にはこの場を借りてお礼申し上げます。そして、この6週間のインターンシップはLINEを知るという点でも、エンジニアとしての働くという点でも非常に有意義な経験になりました。興味のある方は是非エントリーしてみてください!

参考文献

  • [1] Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova. 2019. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, pp.4171–4186.
  • [2] Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, Dario Amodei. 2020. Language Models are Few-Shot Learners. arXiv: 2005.14165. Version 4.
  • [3] カルチャー&トレンドレポート, YouTube, https://www.youtube.com/trends/report/, 2020/10.
  • [4]【CEDEC 2017 フォローアップ】キャラクターらしさ学習AI:多数のキャラクターの個性や違いの可視化による シナリオライティング支援システム事例, Cygames, https://tech.cygames.co.jp/archives/3091/, 2017/10/23.
  • [5] Di Jin, Zhijing Jin, Zhiting Hu, Olga Vechtomova, Rada Mihalcea. 2021. Learning for Text Style Transfer: A Survey. arXiv: 2011.00416
  • [6] Nils Reimers, Iryna Gurevych. 2019. Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks, In Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing, pp.3982–3992.