Azure AI 翻訳 の Custom Translator 用にトレーニングデータを作成してみた

# はじめに
システムの開発者にとって開発だけでなく、システムの仕様などに関するユーザーからの質問に正しく回答するということも大きな仕事の一つだと思います。
最近では、このような回答を英語で行う場面も多くなってきましたが、システム独自の用語を正確に英訳するのは少し時間のかかる作業です。
そこで、今回社内で気軽に使える自動翻訳モデルをAzureAI 翻訳 のCustom Translator機能を使って作成しよう！という取り組みを行いました。
この記事では、Custom Translator 用のトレーニングデータをどのように整えたかについて共有します。
# Custom Translator とは
Custom Translator　とは、Azure AI 翻訳の機能の一つです。固有の用語などが含まれた過去に翻訳済のドキュメントを使用してトレーニングを行い独自の翻訳サービスを作ることができます。
Custom Translatorの概要については[こちら](https://learn.microsoft.com/ja-jp/azure/ai-services/translator/custom-translator/overview)。
# トレーニング用のドキュメントセット
トレーニングには以下の4つのドキュメントセットを用いることができます。
- トレーニングセット
  - モデル構築のベースとして使われる
- テストセット
  - トレーニングの結果を評価するために使われる 
- チューニングセット
  - 機械翻訳のパラメータの値をチューニングするために使われる
- 辞書セット
  - 固有の用語やフレーズを機械的に置き換えるために使われる


各ドキュメントセットの詳細については[こちら](https://learn.microsoft.com/ja-jp/azure/ai-services/translator/custom-translator/how-to/create-manage-training-documents#training-material-for-each-document-types)。

今回、テストセットとチューニングセットについてはシステムに自動的に作成させました。
# モデル作成してみた①
はじめに、辞書セットを中心としたモデルを作成してみました。
### 登録したドキュメントセット
- 辞書セット
  - 社内で翻訳時に既に使用していた辞書（画面名やドキュメント名などの固有名詞を登録したもの）
- トレーニングセット
  - 過去に翻訳済のドキュメントの対訳数本（画面の説明書など）
### 結果
　トレーニングセットとして登録したドキュメントと類似の内容であれば、うまく返してくれました。ただ、今回登録した業務系のドキュメントとは違うタイプのドキュメント（開発系のドキュメントなど）だと、うまく固有名詞を拾えていなさそうでした。。
 例：
 > **受注**の更新処理を実装します。
 
上記のデータを英訳すると、以下のようになりました。
 > Implement update processing of **order**.
 
 ※当社のシステムでは**受注**という単語を「指示」と区別するために、**sales order**としているのですが、「order」となってしまっています。
 

### 所感
トレーニングセットの量が少ないことが影響していそうと感じました。
辞書には「受注○○ = sales order ○○」という登録があるのですが、完全に一致していないとうまく訳せていない印象を受けました。また、辞書セットのみでは単数複数などの区別がうまくつかないため、やはりトレーニングセットをもとに学習させることが大事なようです（[公式初心者向けガイド](https://learn.microsoft.com/ja-jp/azure/ai-services/translator/custom-translator/beginners-guide)にも記載あり）。
そこで、**辞書セットからは必要な固有名詞のみ拾い、残りはトレーニングセットとして学習させる**という方針がよいのではと考えました。
また、トレーニングセットの量によっても費用がかさむということもあり、翻訳済のドキュメントすべてをとりこむのではなくこれらを精査してとりこんでみようと考えました。

# モデル作成してみた②
前回の反省をもとに再チャレンジです。
### 登録したドキュメントセット
- 辞書セット
  - ①と同様
- トレーニングセット
  - 過去に翻訳済のドキュメントの対訳を精査したもの約20本（画面の説明書など） 
### 精査する際に気をつけたこと
- 文の前後関係に依存した英訳
英訳時、文の前後関係などをもとに主語を補完して訳している場合が多くあります。
例：

> 1. 機能A
   　原価計算で使用するデータを管理します。

上記のデータを英訳すると、以下のようになります。

> 1. Function A
  　It is a **function** to manage the data used for cost calculation.


2文目単体では主語が「A機能」であることが分かりませんが、英訳時に「function」を補語として補っています。
文章を通して読むと適切な訳ですが、1文単位でみると意訳となっています。
そこで今回はこのような1文単位で訳が完結しないものはトレーニング用のデータから外しました。
　
- 見出し部分の英訳
英語では、見出しに相当するものは以下のように各単語を大文字にしています。
例：

> 機能Aの概要
　・・・
 
上記のデータを英訳すると、以下のようになります。

> Overview of Function A
　・・・

　
しかし、これも1文目単体で見ると、1文目が見出しかどうかの判別がつきません。。
このような場合も今回はトレーニングデータセットに入れませんでした。
そのほかにも明らかに意訳であるものや誤訳などもトレーニングデータセットから削除しました。
　
### 結果
①よりも断然精度が上がりました！
例：
> **受注**の更新処理を実装します
- 今回作成したモデルを用いた場合：
     - Implements the **sales order** update process
     
はじめに作成したモデルでは、**受注**を**sales order**として英訳できませんでしたが、今回作成したモデルでは正しく英訳できています！

例：
> **項目**の値を「**品目**A」に設定してください。

- Google翻訳を用いた場合：
  - Set the **item** value to "**Item** A"
- 今回作成したモデルを用いた場合：
  - Set the value of the **column** to "**Item** A".
  
翻訳サイトなどでは**項目**は「item」と訳されることが多いのですが、当社のシステムでは**品目**に対する訳を「item」としています。
　そのため、「項目」に対してはitemではなく、「column」や「field」といった単語を用いる必要があるのですが、新たに作成したモデルではこちらも正しく使い分けられています。
### 所感
辞書セットに加え、翻訳済のドキュメント対訳を精査してトレーニングデータとして登録し学習させたことで、文脈が変わっても固有名詞を正確に使うことができるようになったと思います。また、翻訳済のドキュメントの中には同じ内容が重複している場合などもあったので余分なデータを登録することも防げました。そのため、この取り組みは一定の効果があったのではないかと感じています。

# さらなる改善に向けて
  メールなどで使う一般的なビジネス用語について（「ご質問ありがとうございます」や「ご認識の通りです」といったフレーズ）の英訳の精度がまだまだであると感じました。
こちらは、トレーニングセットとして登録したものがワンフレーズのみであったためうまくトレーニングできていないことが原因ではないかと考えています（完全一致だと登録済の訳で返してくれるが、少し表現が変わるとぶれてしまう）。
このあたりの改善に加え、今後は別製品向けの翻訳モデルの作成にも取り組んでいこうと思います！