Closed19

議事録作成を楽にできないかという実験

Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

Motivation

最近は音声認識も進化しているので、頑張れば文字起こしできるんじゃないかと思っている。できてしまえば、仕事効率化が捗る。

Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

やることリスト

1. First Step

目的:AWS Transcribeの使い方を理解する

  1. [対応済]:とりあえずAWS Transcribeを使ってみる
  2. [対応済]:カスタム語彙を使ってみる

2. PoC

目的:ローカル用語の認識精度を向上させられるか検証する

  1. [未対応]:過去の議事録をテキストファイルとして収集する
  2. [未対応]:テキストファイルを形態素解析にかける
  3. [未対応]:形態素解析結果を一般的な用語とローカル用語に分類する
  4. [未対応]:ローカル用語を出現頻度が高い順にソートする
  5. [未対応]:出現頻度の高いローカル用語をカスタム語彙に登録する
  6. [未対応]:カスタム語彙を入れた状態で音声認識を行う
Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

とりあえずAWS Transcribeを使ってみる

設定はこんな感じ。


Transcription jobsの設定

Outputバケットを指定するとJSON形式のデータが吐かれる。指定しなければ、結果がTranscription previewとしてWebコンソール上に表示される。

元にした文章はこちら。これを読み上げた音声を食わせた結果はこんな感じ。なお、私は滑舌が悪い。それにしては割と良い精度な気がする。

中国 の 商務 省 や 税関 総 署 は 二 日 電力 や 金融 など の 実務 で セキュリティ を 守る ため に 使う 暗号 技術 の 輸出 を 許可 制 に する と 発表 し た データ 漏えい を 防ぐ 半導体 も 含む 対 都市 に 施行 し た 戦略 物資 や ハイテク 技術 の 輸出 管理 を 強める 新法 に 基づく 許可 品目 リスト 問題 数 だ 中国 が 六 割 強 の シェア を を 握る で や ケーズ レアアース は 含ま れ て い ない 二 千 二 十 数 年 一 月 等 から 適用 する 第 一 弾 で は 国民 生活 など に 関わる 情報 を 保護 する 商用 暗号 を 使っ た 設備 や サービス を 対象 に し た 中国 国内 の 輸出 企業 は 輸出 する 際 に 事前 に 小 無性 に 許可 を 取る 必要 が ある 輸入 許可 品目 の リスト も 今回 を 公表 し 暗号 化 機能 を 搭載 し た 電話機 や ファックス に 許可 制 を 導入 し た 中国共産党 の シーチンピン その 初期 は 十 一 月 三 十 日 の 党内 会議 で 国家 の 安全 に 関わる 革新 的 な 技術 の 研究 開発 統合 を 強化 し なけれ ば なら ない と 強調 し た 中国 は 暗号 について 国家 の 安全 を 守る 革新 的 な 技術 と 位置付け て おり 輸出 管理 の 強化 で 技術 流出 を 防ぐ 思惑 も あり そう だ パソコン データ の 漏洩 を 拭け せる 半導体 は 多く の パソコン に 組み込ま れ て いる 中国 当局 が 許可 制 を 縦 に 輸出 を 停滞 さ せる よう な こと が あれ ば サプライ 遅延 に 影響 を 与える 恐れ も 否定 でき ない

{
  "jobName": "test-20201202",
  "accountId": "xxxxxxxxxxxx",
  "results": {
    "transcripts": [
      {
        "transcript": "中国 の 商務 省 や 税関 総 署 は 二 日、 電力 や 金融 など の 実務 で セキュリティ を 守る ため に 使う 暗号 技術 の 輸出 を 許可 制 に。 する と 発表 し た データ 漏えい を 防ぐ 半導体 も 含む 対 都市 に 施行 し た。 戦略 物資 や ハイテク 技術 の 輸出 管理 を 強める 新法 に 基づく 許可 品目 リスト 問題 数 だ! 中国 が 六 割 強 の シェア を を 握る で や ケーズ レアアース は 含ま れ て い ない 二 千 二 十 数 年 一 月 等 から 適用 する 第 一 弾 で は 国民 生活 など に 関わる 情報 を 保護 する 商用 暗号 を 使っ た 設備 や サービス を 対象 に し た。 中国 国内 の 輸出 企業 は 輸出 する 際 に 事前 に 小 無性 に 許可 を、 取る 必要 が ある 輸入 許可 品目 の リスト も 今回 を 公表 し 暗号 化 機能 を 搭載 し た 電話機 や ファックス に 許可 制 を 導入 し た。 中国共産党 の シーチンピン その 初期 は 十 一 月 三 十 日 の 党内 会議 で 国家 の 安全 に 関わる 革新 的 な 技術 の 研究 開発 統合 を 強化 し なけれ ば なら ない と 強調 し た 中国 は 暗号 について 国家 の 安全 を 守る 革新 的 な 技術 と 位置付け て おり 輸出 管理 の 強化 で 技術 流出 を 防ぐ 思惑 も あり そう だ パソコン データ の 漏洩 を 拭け せる 半導体 は 多く の パソコン に 組み込ま れ て いる 中国 当局 が 許可 制 を 縦 に 輸出 を 停滞 さ せる よう な こと が あれ ば サプライ 遅延 に 影響 を 与える 恐れ も 否定 でき ない"
      }
    ],
    "items": [
      {
        "start_time": "2.14",
        "end_time": "2.67",
        "alternatives": [
          {
            "confidence": "1.0",
            "content": "中国"
          }
        ],
        "type": "pronunciation"
      },
   以下略
Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

追加で2者の対話(話しことば)パターンも試してみた。手頃な録音データがなかったので、YouTubeからおめシスの動画を1分だけ拝借。

耳コピ結果はこちら

レイ・リオ「どうもどうも、おめシスでーす」
リオ「レイちゃん」
レイ「な、何ですか」
リオ「今日はね、リオが考えたゲームをねやりたいんですよ」
レイ「えー、何するの」
レイ「リオ「今日の企画は、ドドン。「コレ何のモンスター?遊戯王コスプレ選手権」。うわ、出たな遊戯王。」
レイ「自分で言ったやつやん」
レイ「リオ「あのぉ、遊戯王のモンスターのコスプレをして、何のモンスターになっているのか当ててほしいんですよ」
レイ「はあ」
リオ「でもね、困ったことにね、リオ遊戯王知らないんですよね。」
レイ「どうすんのそれは。」
リオ「なので、リオがコスプレするので、レイちゃんが何個当てられるかっていうそういう勝負をしたいんですよ」
レイ「なるほどね。リオちゃんは当てる側はやらないということ?」
リオ「そうだ」
レイ「マイナーなやつやめてよ?」
リオ「ああ、わかってるよ」
レイ「心配だ」

Transcribeに食わせた結果はこちら。だいぶ壊滅的。

Speaker 1:
どう 感じ で 大体 何 です か 今日 は ね 微妙 だっ た ゲーム やり たい です よ
Speaker 1:
ね 何 する の を? 今日 の 企画 は 誰 だ? これ ない と 思っ た 遊漁 こう 潰れ 選手 系 うわ って めっちゃ 可愛い や 自分 で やっ た 時 や
Speaker 1:
肝 詐欺 や
Speaker 0:
そう あの 有料 の モンスター の こ こぼれ落ち て え? 何 の モンスター に なっ てる の か? 当て て 欲しい です よ
Speaker 0:
ああ でも ね 困っ た こと ね いい お家 を 知ら ない です よ ね そう だ よ ね 銅 の ソレ は え な ので 利用 が コスプレ する ので 店員 さん が 何 か を 当て られる か って いう そう し たい です なるほど ね りゅう ちゃん は? 中 側 は やら ない って こと を
Speaker 1:
あ そう だ
Speaker 0:
マイナー を やっ て やめ て よ ああ わかっ てる とか 心配 だ

Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

カスタム語彙を使ってみる

んー?どうやって「ん」を表現するんだ?「m」で代替?
ボケてた。"n" は "m" のあとや。


サポートされるローマ字


整理するとこんな感じ

Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

めちゃくちゃエラー吐かれる・・・何が違うんだ・・・

ここまで最小化したんだけどな。

Phrase	IPA	SoundsLike	DisplayAs
レイ		rei	レイ
リオ		rio	リオ
Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

スッキリした頭でマニュアルと操作画面を読み込んだ。そもそも、カスタム語彙の作成方法にはリストとテーブルの2種類がある。


カスタム語彙のアップロード方式

リスト形式

リスト形式はブラウザからファイルを食わせる。下記のような感じでただただ単語をリストアップしていけば良い。UTF-8で改行コードはLFとするのをお忘れなく。

レイちゃん
リオちゃん
おめシス

ここで使える文字は限られてくるので、ひらがな、カタカナ、アルファベットで固めたほうがいいかも。使える文字はjapanese-character-set.txtに書かれている。

テーブル形式

テーブル形式はS3からファイルを食わせる。下記の様な感じ。UTF-8で改行コードはLF、区切り文字はTABで。

Phrase	IPA	SoundsLike	DisplayAs
れいちゃん		rei-chan	レイちゃん
りおちゃん		rio-chan	リオちゃん
おめしす		omesisu	おめシス

SoundsLike フィールドは基本的にローマ字でOKですが、"shi" のようなヘボン式で書くとエラーとなるので要注意。

Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

カスタム語彙を食わせた結果がこれ。多少改善してるけど、きついな。

Speaker 1:
どうも 味 で 大体 何 です か 今日 は ね 微妙 だっ た ゲーム やり たい です よ
Speaker 1:
ね 何 する の を? 今日 の 企画 は 誰 だ? これ ない と 思っ た 遊戯王 コスプレ 選手 系 うわ って めっちゃ 可愛い や 自分 で やっ た 時 や
Speaker 1:
肝 詐欺 や
Speaker 0:
そう あの 遊戯王 の モンスター の コスプレ おっ て え? 何 の モンスター に なっ てる の か? 当て て 欲しい です よ
Speaker 0:
ああ でも ね 困っ た こと ね いい お家 を 知ら ない です よ ね そう だ よ ね 銅 の ソレ は え な ので リオ が コスプレ する ので 店員 さん が 何 か を 当て られる か って いう 勝負 を し たい です なるほど ね リオちゃん は 当てる側 は やら ない って こと を
Speaker 1:
あ そう だ
Speaker 0:
マイナー を やっ て やめ て よ ああ わかっ てる とか 心配 だ

Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

YouTubeの字幕自動生成を見ても精度低いから、おめシスのような独特なテンポ感の会話を機械が認識するのは難しいのかもしれないな。


おめシスの動画と自動生成された日本語字幕

Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

UDトーク

さらに探すとUDトークってのを見つけた。これ、Zoomと連携できてやばい。スマホが必須になるけど、Zoomの音声をUDトークでかなり精度高く文字起こしできる。さらにその文字起こし結果をZoomにライブトランスクリプトとして配信できるから字幕付きの会議が余裕でできる。スマホアプリでも良いけど、Windows版アプリも入れれば、文字起こしと同時に誤認識をその場で修正できる。最強!


Windowsアプリで誤認識を修正している様子

さらに、スマホアプリで単語登録できるからAWSとかZoomとかの用語を登録しておけばちゃんと認識してくれる。最強!

Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ
Masayoshi Tohna@おれさまラボMasayoshi Tohna@おれさまラボ

なんかこんな感じで固有名詞を抽出できるみたい。

test.py
#! /usr/bin/python3
import sys
import re
import MeCab

tagger = MeCab.Tagger("mecabrc")

cmd, infile = sys.argv
with open(infile) as f:
    text = f.read()

node = tagger.parseToNode(text)

while node:
    word = node.surface
    if node.surface != "":  # ヘッダとフッタを除外
        if (node.feature.split(",")[1] == "固有名詞"):
            print(node.feature.split(",")[6])
    node = node.next
このスクラップは2020/12/10にクローズされました