株匏䌚瀟RevCommのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟RevComm

株匏䌚瀟RevComm の技術ブログ

å…š190ä»¶

RevCommのフロント゚ンド゚ンゞニア兌むベントモデレヌタヌの小山です RevCommは7/5(æ°Ž)に「䞖界に認められたAIスタヌトアップが、Djangoを䜿っお感じる良さずは 」ずいうむベントを開催したした。今回はそのむベントで公開したスラむドや動画を公開しながら、むベント䞭に時間の郜合で答えられなかった質問にも答えおいきたす。 今回のむベントは私が䌁画からモデレヌタヌたで務めさせおいただきたした。登壇した小門さんず近藀さんは、RevCommの䞭でも技術に぀いおのプレれンやディスカッションが埗意な2人です。期埅以䞊に良いプレれンをしおくれお、参加者の方々にも深い質問をいただくこずができた䌚になりたした。 フレヌムワヌクの䜿い方はドキュメントでも孊ぶこずができたすが、状況に応じた遞定や刀断は䜿い手次第。今回はその点にも觊れおいたすので、ぜひずもご閲芧いただけるずありがたいです speakerdeck.com speakerdeck.com youtu.be Q and Aぞの回答 むベントではたくさんの質問をいただくこずができたした。時間の関係䞊、党おに答えるこずができなかったので、この堎で共有をさせおいただきたす。 — Q: Djangoのバヌゞョンアップ蚈画ずかどうされおいたすか 盎近だずDjango4.2でMySQL5.7ずPostgreSQL11のサポヌトが切れるので、そのあたりでどのように適甚されたか、たたはどのように適甚しようずしおるなどあれば教えおください。 A: 瀟内ではマむクロサヌビス単䜍にアプリケヌションが分かれおいお、プロゞェクトずしお独立しおいたす。 スケゞュヌルや方匏など含めた蚈画はプロゞェクト毎に策定しおいたす。 Django 3.2 LTS は 2024幎4月にはメむンストリヌムから倖れるため、なるべくそれたでに曎新するこずを瀟内の共通認識ずしおいたす。 たたDBは PostgreSQL バヌゞョン12以䞊を䜿甚しおるため、その圱響はありたせんでした。 DBやRedisなど、呚蟺のサヌビスもこためにバヌゞョンアップするこずも重芁だず思いたす。 Q: 40個もアプリが分かれおるず倧倉そうですが、どういう基準でアプリを分割しおるのでしょうか。 A: 機胜の責務や䟝存関係を考慮したす。 䟋えばナヌザヌ認蚌の機胜ずログむン埌に利甚する機胜ずでDjangoアプリケヌションは分割したす。 責務ごずにアプリケヌションを分割するこずで改修範囲を小さくできたり、コヌドベヌス党䜓の芋通しを高く保぀こずができたす。 Q: 䞀郚でDjango4.2を利甚されおいるずのこずですが、アップデヌトしおよかったずころや、泚意が必芁だったずころはありたすか A: 前述の通り、Django 3.2 LTS はいずれメむンストリヌムから倖れお開発も停止するため、最新の LTS に远埓するこずはほが必須ず考えお察応しおいたす。 たた、现かい機胜改善も倚数あり䟿利になっおいっおいたす。 アップデヌト時の泚意点ずしお、初めにリリヌスノヌトから倧きな倉曎や圱響が無いか確認したした。 Django 4.2 release notes 他の質問にもある、MySQL5.7/PostgreSQL 11 のサポヌト切れに぀いおも曞かれおいたす。 既に瀟内でアップデヌト枈みの察応に぀いおは別のブログ蚘事でも説明しおいたす。 tech.revcomm.co.jp Q: 2019幎の途䞭からDjangoに切り替えたずいうこずですが、移行時にはどのように実斜したのでしょうか党郚曞き換えるずするず実装もテストすごく倧倉そうだなず思い気になりたした。 A: 圓時Djangoぞの移行を担圓した方にヒアリングしたずころ、䞋蚘のような返答をいただきたした。 Node.jsからDjangoぞ切り替えた圓時は機胜・コヌドずもに少なかったので、テストも実装もあたり時間かからず移行できたした。振り返るず、早い段階で移行する刀断ができたので良かったず思いたす。 たた、圓時は品質よりスピヌドが求められおいたこずもあり、ナニットテストはただなく、手䜜業によるシステムテストだけ実斜し、品質を担保しおいたした。このためテストケヌスはそのたた流甚できたため、移行のネックになるこずはありたせんでした珟圚はナニットテスト、システムテスト、QAプロセスたで敎備しおいたす。 Q: Djangoはディレクトリ構成を統䞀しやすいずいうお話があったかず思いたすが、それはstartappコマンドで䜜られるDjangoアプリケヌションの構成はほがそのたたで䜿われるこずが倚いから䌌たような構成になりやすい、ずいう意味でしょうか A: 必ずしもそのたた䜿う必芁は無いず思いたす。 䟋えば、django-admin startapp コマンドで䜜成されるファむルに models.py や views.py などがありたす。 我々のプロゞェクトでは models/xxx.py, views/xxx.py など、ディレクトリ配䞋にモゞュヌルを分割しお配眮しおいたす。 ファむルか ( models.py ) ディレクトリか ( models/ ) ずいう違いはありたすが、呜名ず圹割をDjangoのプロゞェクト雛圢に準拠しおいたす。 Q: RevCommの開発もTDDで行われおいるのでしょうか A: TDDかどうかは個人に任されおおりたす。ただ機胜远加したい際や既存の凊理を倉曎した際には合わせおナニットテストを曞くずいう共通認識はありたす。 Q: フロントがTS、バック゚ンドがDjangoずいう構成なら、最近だずDjangoのかわりにFastAPIを䜿う遞択肢もあるかず思いたすが、仮に新芏で開発するこずになった際に、どちらを採甚したいず思っおいたすか たたは党く別の遞択肢を考えおいるなら、それに぀いお教えおいただけるず幞いです。 A: 個人的には TypeScript のラむブラリも遞択肢に挙げたいずころですが、技術者の確保を考えるず Python のラむブラリになるかず思いたす。 たた、新芏サヌビスの皮類にもよりたすが FastAPI も遞択肢に䞊がるず思いたす。実際に盎近立ち䞊がったプロゞェクトではマむクロサヌビスずしお切り出す API を FastAPI で䜜っおたす。たた、3幎ほど前に BFF に FastAPI を採甚した際には、「asyncio察応、型ヒントぞの察応、OpenAPIドキュメントの自動生成、Django ほど倚機胜ではなくおいい」などが決め手になったようです。 Q: 倚数のDjangoAppを含むコヌドベヌスを運甚する䞊で、DjangoApp同士の䟝存関係に関しお芏玄や工倫されおいるこずはありたすか A: 芏玄は特に入れおいないです。 耇数の App で明らかに䜕床も利甚するものは common ディレクトリに凊理を寄せおいたり、App間に䟝存が発生する堎合(党文怜玢のAppず怜玢察象のAppなど)はSSOTを心がけお䟝存が耇雑にならないようにしおいたす。 党䜓的に特定の技術に固執しすぎずに、実珟したいこずに合わせお柔軟に技術遞定を行っおいるずいう回答でした。たた個人の自由もある皋床認めながらも、チヌム党䜓のこずを考えるずいう感じですね。 終わりに RevCommが急成長する䞭で、開発者は日々課題に向き合っおいたす。その過皋で埗た知芋やそのずきの刀断は瀟内だけでなく、きっず瀟倖の誰かの参考にもなるはずです。これからもむベントを開催しおより良い䌚にしおいきたいず考えおいたす。ぜひずも楜しみにしおください
はじめに こんにちは私はRevCommのCorporate Engineeringグルヌプで䞻にSalesforce Administrator & Developerずしお掻動しおいる長谷郚です。今回はRevCommが提䟛するクラりドIP電話サヌビス「MiiTel」をお客様がご利甚を開始するために必芁なシステムの内の1぀、「MiiTel Signup」の効率化に぀いおお話したいず思いたす。 「MiiTel Signup」ずは、MiiTelを提䟛するにあたっお必芁な法人確認、本人確認システムのこずを指したす。これは、RevCommが電話転送サヌビス事業者ずしお遵守すべき犯眪収益移転防止法の芁件を満たすために必芁なシステムです。 旧システムの課題 今たでの「MiiTel Signup」では、業務効率の芳点でいく぀かの課題がありたした。 散らばったシステム : 旧「MiiTel Signup」は顧客情報を管理しおいるSalesforceずは切り離されたシステムずしお構築されおいたした。これにより、各システム間でデヌタを連携するために䞀郚手䜜業での玐づけ業務が発生しおおり、時間ず劎力が増倧しおいたした。顧客デヌタの䞀元管理が困難であり、その結果ずしお顧客察応の速床ず品質に圱響を䞎えおいたした。 進捗確認の困難さ : デヌタ連携をする必芁があるため、垞にリアルタむムで進捗ステヌタスをアップデヌトするこずができず、法人確認、本人確認の進捗ステヌタスの確認が煩雑で、䜜業の効率が䜎䞋しおいたした。確認䜜業は、各システムを切り替えながら行う必芁があり、そのたびに時間ず゚ネルギヌを消費するこずずなりたした。 䞊蚘の課題により、確認䜜業の工数がそもそも倚い䞊、進捗状況や必芁なネクストアクションの特定に手間がかかるこずで、瀟内の䜜業負荷が増幅しおいたした。その結果、重芁な業務に集䞭するための時間が奪われ、党䜓の䜜業効率に悪圱響を及がしおいたした。 旧システムの抂芁むメヌゞ 新システムの開発 そこでこれらの課題を解消するために、新しい「MiiTel Signup」システムをSalesforce䞊に構築したした。 たず始めに、新システムの党䜓的な構成を理解するために以䞋のシステム構成図をご芧ください。顧客偎入力から確認䜜業たで党おSalesforce䞊で完結させるため、以前ず比范しおシンプルな構成ずなっおいたす。 新システムの抂芁むメヌゞ この新システムは、以䞋のキヌポむントを䞭心に構築されおいたす。 進捗確認の効率化 顧客が情報を入力する画面はSalesforceのExperience Cloudにより構築され、入力された情報はSalesforce䞊の顧客デヌタず玐付けられたす。これにより、法人確認、本人確認の進捗ステヌタスを䞀元管理するこずが可胜になり、デヌタの連携に必芁な時間ず劎力が倧幅に削枛されたため、煩雑だった䜜業が倧幅に効率化されたした。 eKYCサヌビスの芋盎し : 新しい「MiiTel Signup」では、本人確認に必芁な身元確認曞類をWebカメラを甚いお提出できるようになりたした。これにより、顧客が情報を入力する䞀連の流れで身元確認曞類を提出できるようになりたした。たた、身元確認曞類の提出時に顔貌の撮圱を行うこずもできるようになりたした。これにより、身元確認曞類ず顔貌の比范ができるようになり、間違いなく本人が提出しおいるこずを担保するこずができるようになったため、今たで必芁だった郵送による個人宅ぞの䜏所確認の実斜も䞍芁になりたした。 操䜜性の向䞊 Salesforceの取匕先レコヌドペヌゞ䞊に、法人確認、本人確認の進捗状況やネクストアクションが確認できる管理画面をLWC(Lightning Web Component)で実装したした。この画面では、顧客の珟圚の法人・本人確認の進捗ステヌタスやネクストアクションを確認するこずができ、確認䜜業における工数を倧幅に削枛するこずに貢献できたした。 以䞋のむメヌゞは、この新しい管理画面の䞀郚抜粋です このようにしお、新しい「MiiTel Signup」は、顧客ずの契玄に必芁な法人確認、本人確認を効率的に行うためのツヌルずなりたした。次のセクションでは、これらの改修がもたらした具䜓的な効果に぀いお説明したす。 改善埌の効果 新たな「MiiTel Signup」をSalesforce䞊に構築したこずにより、私達は様々な面で倧きな効果を埗るこずができたした。 情報管理の効率化 旧システムでは情報が分散しおいたしたが、新システムでは党おの顧客情報ず確認ステヌタスがSalesforce䞊で䞀元管理されるようになりたした。これにより、党お顧客のデヌタに玐づいおeKYCのデヌタが玐づくため、情報の探し出しにかかる時間ず手間が倧幅に枛り、党䜓の業務効率が向䞊したした。 レポヌト機胜の掻甚 Salesforce䞊で情報が䞀元管理されるようになったこずにより、Salesforceのレポヌト機胜を掻甚するこずができるようになったため、䜜業が必芁な取匕先のみを瞬時に䞀芧化するこずができるようになり、必芁な䜜業の優先順䜍付けやスケゞュヌル管理が容易になりたした。たた、Salesforceのレポヌト機胜は非垞に柔軟か぀簡単に抜出内容や抜出条件を倉曎したりできるので、Adminチヌム偎で必芁な情報を抜出するためのレポヌトを必芁に応じお柔軟に䜜るこずができるようになりたした。 確認䜜業の効率化 取匕先レコヌドペヌゞ䞊に管理画面を構築したこずにより、瀟内での確認工数が倧幅に削枛されたした。この画面では、顧客の法人確認や本人確認の進捗状況をリアルタむムで把握し、必芁なネクストアクションを明確にするこずができたす。これにより、確認䜜業の粟床が向䞊しただけでなく、無駄な手間を削枛し、手䜜業によるミスを防止するこずも可胜ずなりたした。 これらの改善により、瀟内の業務効率化が図られ、党䜓ずしおMiiTelのサヌビス提䟛胜力の向䞊に貢献できたした。Adminチヌムのメンバヌからも「以前に比べお䜿いやすくなり、確認䜜業の工数も倧幅に削枛できたした」ずいう声をいただきたした。 たずめ 本蚘事では、MiiTelを提䟛するための法人確認・本人確認プロセスを効率化するためのシステム「MiiTel Signup」の再開発に぀いおお話したした。これは我々が犯眪収益移転防止法を遵守するための重芁な取り組みです。 旧システムでは顧客情報の䞀元管理が難しく、法人確認・本人確認の進捗状況の確認が煩雑な状況にありたした。そのため、確実な法什遵守を実斜するために倚くの工数がかかっおおりたした。しかし、新システムにより、これらの課題が倧幅に解消され、工数削枛や法人確認・本人確認のリヌドタむム短瞮など、様々な業務効率化が実珟したした。 今埌も私達は、曎なるサヌビス改善を目指しお、必芁な改善を逐次行っおいきたす。今回の取り組みが、業務効率化やCRMの掻甚に興味のある方々の䞀助ずなれば幞いです。
※この蚘事はバック゚ンド゚ンゞニアRaman Yachiによる蚘事『 E2E Testing system for Miitel Account 』を翻蚳したものです。 はじめに こんにちは、バック゚ンド゚ンゞニアの谷地ラマンです。 RevCommではマむクロサヌビスアヌキテクチャを採甚しおおり、私はその䞭で認蚌/認可の機胜を提䟛するAccountチヌムに所属しおいたす。 ナヌザヌのログむン認蚌を凊理する重芁な郚分であり、ここに障害が発生するずナヌザヌがサヌビスにログむンできなくなる可胜性があるため、可胜な限り防ぎたいです。 そのための察策ずしおは、第䞀に党おの機胜に察応する単䜓テストを実装するこずです。 私のチヌムではテストフレヌムワヌクであるpytestを䜿甚し、Pull Requestにおいお単䜓テストが実行されるためコミットごずの機胜を保蚌し、あるいはバグを怜出するこずができたす。 単䜓テストに加えお、実際のナヌザヌシナリオずしおの振る舞いを確認するためのシステムテストを実装しおいたす。これは実環境のAPI゚ンドポむントに察しおPostmanによるテスト (E2Eテスト) を実行し、レスポンスを怜蚌しおいたす。 この蚘事では私たちのE2Eテスト自動化に぀いお玹介したす。 課題 テストを自動化する前は、各メンバヌがロヌカルマシン䞊でE2Eテストを手動実行しおデプロむ埌のサヌビスが期埅通りの動䜜をするこずを確認しおいたした。 しかし、䟋えばあるメンバヌの環境では成功しおいたものが別のメンバヌは倱敗したりず、テストの動䜜を統䞀できおいないこずが課題でした。 結果ずしお、テストの信頌性が䜎くなっおしたいたした。 たた、開発/ステヌゞング/本番など、環境ごずにPostmanの倉数を䜿い分けるこずも面倒でした。 そこで、リリヌス埌の䞍具合を怜知するためにより良い方法がないかどうか怜蚎したした。 これたでのこずから、私たちの芁件は次の通りです。 垞に最新のアプリケヌションURL構造やむンタヌフェヌスをテストできるこず 非ロヌカル環境で実行するこずで、テスト結果をチヌム内で共有できるこず 最小限の蚭定内容のみを必芁ずするシンプルな仕組み 解決策 たず最初に、Postmanによるテストの実行をAWS CodeBuildに移行したした。CodeBuildはAWS CodeDeployによるリリヌスの埌に起動されたす。 これによりテストは垞に最新のアプリケヌションを察象ずし、か぀個人のロヌカル環境に䟝存しないプラットフォヌムで実行できたす。 The e2e testing pipeline 詳しく説明したす。 ゜ヌスコヌドの修正を取り蟌むず、GitHub Actionsを介しおCodeDeployによるデプロむプロセスが起動したす。CodeDeployの正垞終了をトリガヌにしお、CodeBuildによるE2Eテストが起動したす。 CodeBuildの凊理の䞭で、リリヌス盎埌のアプリケヌションに察しおAPIリク゚ストを実行したす。 この䞭でPostmanのCLIツヌルであるNewmanを䜿っおいたす。 https://learning.postman.com/docs/collections/using-newman-cli/command-line-integration-with-newman/ これによっお、PostmanのテストケヌスをCodeBuildで実行するこずができたす。 テストの実行結果はCodeBuildのレポヌトずしおアップロヌドされたす。 CodeBuildの凊理が終了するず、そのレポヌトを通知するLambda関数を起動したす。Lambda関数はレポヌトをパヌスしおテストの結果をSlackチャンネルに送信したす。 テスト結果の通知䟋を瀺したす。テストの成功件数ず党䜓件数、そしおタむムスタンプが分かりたす。 特定のテストケヌスが倱敗した堎合は、該圓のテストケヌス名を添えお通知したす。 ここたでで説明しおきた仕組みに関するAWSのむンフラ環境やテストケヌスのレシピはGitHubリポゞトリで管理しおいたす。 AWS環境の構成管理、倉曎はTerraformで管理しおいたす。 たたCodeBuildは゜ヌスプロバむダヌの指定によっおこのリポゞトリからテストレシピを取埗できるため、垞に最新のテストケヌスでPostmanによるE2Eテストを実行できたす。 これにより、ここたでで述べおきた自動テスト党䜓の仕組みを1぀のリポゞトリを管理するこずで完結させおいたす。 これらのパむプラむンによっおCI/CDずしおバック゚ンドをテストできたす。 テストが必芁になるたびに開発者の生産性を䜎䞋させるこずなく、信頌性の高いテストを実行できたす。テストの結果をすぐに確認できお、元ずなった修正も簡単に远跡できたす。 たずめ 最埌に、これは私にずっおTerraformずCI/CDぞの初めおの挑戊でしたが、このタスクを任されたこずは幞いでした。 自分で問題に取り組む裁量が䞎えられおいたし、分からないこずはい぀でも同僚からアドバむスしおもらえたした。 同じように問題解決に䞻䜓的に取り組める人なら、RevCommはあなたにずっお最適な環境だず思いたす (翻蚳・線集: 小門照倪 RevComm Technology Dept, Backend Group)
Intro Hello, my name is Raman Yachi. I am an engineer here at RevComm working on the Accounts team. Our product suite at RevComm follows a microservices architecture and I would like to talk about how we automate testing our Account backend, which is a pivotal part of the backend as it deals predominantly with user authentication. Failures here could lead to users being unable to log into our services, which is something we want to avoid as much as possible. Our first line of defense against that is ensuring all our features have corresponding unit-tests. For the backend we use Pytest as our testing framework and each commit merged to a PR triggers the whole battery of tests so that we can guarantee functionality on a commit-by-commit basis and know exactly where breaking changes were introduced. Unit-tests do not convey the whole story so in addition we run system tests to ensure performance in real-world scenarios. This is done by running Postman tests (E2E Test) against our live server’s API endpoints and validating their responses. Issue Prior to having automated the tests our team used to run manual API tests from local machines using Postman to ensure that the newly deployed service was working as intended. The issue with that was the test suites, while version controlled, were not ensured to be uniform. So someone’s test could fail and another’s could succeed and the only way to tell is by lining up the backend and test versions. This made the testing process unreliable as it becomes hard to tell which machine’s result is correct at first glance. Furthermore co-ordinating variables between the production, staging and development environments could become a hassle for people not used to the Postman product. So we sought for an alternative that served as a single source of truth regarding whether the changes shipped broke any endpoint. From these key requirements we know that we need: A testing framework that tests the backend with correct (most recent) API structure (endpoint URL, body format etc.), and executes on non-local infrastructure so that results are available across the team. A simple enough interface that requires minimal configuration on the user end What we did To accomplish this our first step was simply migrating the Postman test runs to a CodeBuild instance, which ensures that the platform is up-to-date and independent to our machines. Once the tests were set up we still needed a method to trigger them, along with a notification system. This was accomplished using the architecture below. To the left of the CodeBuild testing is our Trigger portion of the pipeline and to the right the Notification mechanism. The e2e testing pipeline Every time we release to our environment a respective deployment is triggered in CodeDeploy via Github Actions. At the successful conclusion of this deployment we can assume that the new release is now available and we initiate our integration tests. We do this in the next step by triggering a CodeBuild build. CodeBuild then tests our new backend instance by testing the API of the backend by mimicking user API calls (engaging with the user-facing endpoints). The tool we use for that is Newman, Postman’s CLI counterpart. https://learning.postman.com/docs/collections/using-newman-cli/command-line-integration-with-newman/ This allows us to craft/debug test-cases in Postman and then have our CodeBuild instance run those tests. These test-case results are uploaded to CodeBuild’s report. The conclusion of this CodeBuild run will then trigger a Lambda function that receives the CodeBuild Report. The Lambda will then parse the report and send a message to a dedicated Slack channel that informs everyone of the test’s conclusion and results . An example result from the E2E tests is shown below, where we get the pass/total count, and timestamp: Should tests fail the team is notified by their name being included in the report: With this we have gained the ability to confidently know whether our service is functional after every merge. And with the Slack integrations any failure can be converged upon much quicker. Thus fixes can be issued faster too. The AWS infrastructure, along with the testing recipes are managed by us in a single repository. The test recipes are handled with Postman, while infra changes are affected via Terraform. This repo also serves as the instruction set for our CodeBuild testing instances. What this means is that our Postman test recipes are version controlled in the same repo, to ensure the tests are always up to date whenever a E2E test run is initiated. Thus the whole testing pipeline is managed in a self-contained manner and allows us to hermetically test our backend. Conclusion With the new pipeline we can test our backend in a CI/CD manner which ensures developer productivity does not take a hit every time testing is required and the tests conducted are reliable, the results readily available and also easily traced back to their respective changes. Parting thoughts for this is that I really enjoyed this task as this was my first foray into Terraform and CI/CD and being tasked with the problem despite that was a blessing in disguise. I was given free reign to tackle the problem on my own, and whenever my lack of experience became apparent my colleague’s were able to provide advice and direction – and if you are someone who similarly enjoys working autonomously on interesting problems I believe RevComm would be a great place for you to contribute and grow!
2023幎4月28日(金)に、【RevCommの゚ンゞニアの開発組織ずは】ずいうオンラむンむベントを開催したした。この蚘事ではむベントの内容に觊れながら、時間の関係でむベントで觊れるこずのできなかった情報を玹介したす。 むベントは3぀のテヌマに分けお、プロダクトや働き方、カルチャヌを玹介したした。 RevCommずいう䌚瀟ず開発しおいるプロダクトに぀いお 開発組織に぀いお 珟堎のリヌダヌの考えに぀いお むベントの動画も公開しおいたす。 www.youtube.com 急成長しおいるスタヌトアップの1぀の開発組織のあり方ずしお参考になるず思いたす。ぜひご芧ください RevCommの開発組織の䞭心にいる4人の登壇者 今回の登壇者は、RevCommの開発組織の䞭心にいる4人。執行圹員/CTOの平村ず、執行圹員/Senior Engineering Managerの瀬里、Engineering Managerの川添ず、Backend Engineerの倧谷です。 圹職ずしおはマネゞメントやリヌダヌのポゞションですが、党員がコヌドも曞きたす。 RevCommではおおよそ8 〜 9割ほどのリヌダヌやマネヌゞャヌが、マネゞメントをしながらも開発をしおいたす。 技術を深く理解し、チヌムワヌクを駆䜿し、コミュニケヌションの再発明に向けおプロダクトの改善や、新芏プロダクトのリリヌスに向けお日々向き合っおいる4人です。 それでは、むベントの内容に螏み蟌んでいきたしょう。 RevCommの䌚瀟組織ず䞻芁プロダクト たずはCTOの平村からRevCommがどういう䌁業なのか、そしおどんなプロダクトを䜜っおいるのかの説明です。䌚瀟抂芁・ミッション・プロダクトの説明やMiiTelのデモをしたした。 平村は、高い技術力を持ちながらもビゞネスの䌁画が埗意で、䞡方に぀いおわかりやすく䌝えるこずができるCTO。ミッションである「コミュニケヌションを再発明し、人が人を想う瀟䌚を創る」ず「なぜその䞭で音声にフォヌカスするのか」ずいう話のあたりから熱が入りたす。 「(テキストコミュニケヌションず比范しお)音声のコミュニケヌションはただ党然デヌタ化もされおおらず、怜玢・分析や、AIが人の代わりに䜕かをするような詊みにただ繋がっおいたせん。これはビゞネスチャンスなんじゃないかず。こういったサヌビスやプロダクトを䜜ろうず集たったメンバヌが䜜った䌚瀟です」 次にRevCommの䞻力サヌビスである、MiiTelの玹介です。 「電話営業のブラックボックス化問題ずいう課題を解決したい」ずいう目的ず、1぀1぀の機胜に぀いおの説明をしおいたす。 動画内では デモ も行っおいたす。MiiTelを䜿ったこずのない方も倚いず思うので、ぜひ動画のデモもご芧ください。 RevCommの゚ンゞニア郚門に぀いお 次に、執行圹員/Senior Engineering Managerの瀬里からRevCommの゚ンゞニア組織に぀いおの説明です。 マトリックス組織ずいう䜓制をずっおいるこず、アゞャむル開発を行っおいるこず、䜿甚しおいる蚀語やツヌル、瀟員間でのコミュニケヌションも倧切にしおいるこずに぀いお話したした。 「匊瀟のマトリックス組織ずは、個人がテクノロゞヌチヌム(フロント゚ンドやバック゚ンドずいった職胜ごずのチヌム)に所属し、それぞれのチヌムから人が集たっおプロゞェクト(MiiTel Analyticsや新芏プロゞェクト)を䜜り䞊げるずいう組織䜓制です。特城的な制床ずしお、時間さえあれば自身の配属されたチヌムずは異なる興味の分野のタスクも、担圓しおいいずいう制床(15%ルヌル)がありたす」 䟋えば、筆者の知っおいる範囲でも、フロント゚ンド゚ンゞニアがモバむルアプリ開発のためFlutterを扱ったり、バック゚ンドのタスクを担圓したりずいうこずがありたす。 たた、瀬里は瀟員同士のコミュニケヌションに぀いおも語りたす。 「フルリモヌト、フルフレックスだからこそコミュニケヌションは掻発です。察面でも、幎に4回ほどチヌムのミヌティングなどで䌚う機䌚がありたす。普段の業務ではSlackだけで解決しない問題はすぐにビデオ䌚議をしたりしたす。たた、瀟員によっおは、䌑みのずきに旅行先にいる瀟員ず䌚っお飲み䌚をしおいるずいうこずもありたす」 その他、䜕か困ったこずがあるずきに助けを求めるためSlackにhelpmeチャンネルがあるずいうこずなどが話題に䞊がりたした。 プロゞェクトず゚ンゞニアの玹介 今たでは䌚瀟党䜓や゚ンゞニア組織党䜓に぀いおの説明が䞭心でした。次に各プロゞェクトのメンバヌをたずめる2名の玹介です。 芏暡が小さくスピヌドが求められるプロダクト矀を扱うEngineering Manager たずはEngineering Managerの川添から。川添はCorporate Engineeringずいうチヌムのリヌダヌをしおいお、䞻にセヌルスやカスタマヌサクセスなど瀟内のメンバヌが業務で䜿うシステムを開発しおいたす。 「スピヌドが求められるので、プレッシャヌを感じるこずはありたす。䞀方で融通も利くので、バランスをずりながら進めおいたす」ずのこず。 「瀟内のメンバヌが䜿うシステムを扱っおいるからこそ、自分たちの䜜ったものの䞊で、ビゞネスを動かしおいくこずができる」ずいう所にやりがいを感じおいるそうです。 その他、川添は瀟内の開発者が自分の専門倖の技術を孊ぶ機䌚を䜜っおいるこずにも觊れおいたす。 自分のチヌムだけではなく、瀟内の゚ンゞニアの技術向䞊の機䌚を䜜っおいただけるのが玠晎らしいですね(実は筆者もお䞖話になっおいたす。) チヌムの連携をずりながら党䜓も俯瞰するBackend Engineer 次はBackend Engineerの倧谷です。入瀟しお半幎ほどですが、倚方面で掻躍しおいたす。 プロゞェクトマネヌゞャヌの補䜐もしおおり、担圓しおいるのは、通話の分析結果を衚瀺するMiiTel Analyticsずいうプロダクト。MiiTel AnalyticsはMiiTelの䞭心ずも蚀える存圚です。 「MiiTel Analyticsは他のチヌムず連携する必芁がある郚分も倚く、各チヌムのタスクの調敎を行うこずもある」そうです。 たた、「プロゞェクトマネヌゞャヌず連携しお、Analyticsチヌムの圹割がこのたたで良いのかずいうこずや、プロゞェクト管理のやり方も芋盎しを図りながら進めおいたす」ずのこず。 倧谷はMiiTel Analytics以倖にも、組織党䜓のプロゞェクト管理のあり方に぀いお改善を図るチヌムにも、自分で手を䞊げお参加しおいたす。 入瀟歎に関わらず、意欲のある方が自分の力を発揮できるずころはRevCommの良いずころです。 おわりに 䞊蚘のような内容が座談䌚では話されたした。 この他にも、モデレヌタヌの小畑がよく聞かれる質問ぞの答えも登壇者から匕き出しおいたす。たた、応募者の方向けにフォロヌ䜓制やキャリアパスなどにも觊れおいたす。 少しでも興味が湧いたらぜひ 動画 をご芖聎ください たた、RevCommは7月5日氎の正午にDjangoをテヌマにした技術勉匷䌚を開催したす。 䞖界に認められたAIスタヌトアップが、Djangoを䜿っお感じる良さずは オンラむンでの開催です。是非ずもむベントぞのご参加をお願いしたす
Research Engineerの倧野です。 新しいスラむドを公開したのでご玹介したす。 speakerdeck.com スラむドの抂芁 ここでは、機械孊習モデルの孊習の際のメモリ芁件を䞋げるこずができる、Low-Rank Adaptation (LoRA) の評䟡を行いたした。 蚀語モデルの倧きさが加速床的に増えおおり、それに䌎いハヌドりェアの芁件が倧きくなっおいたす。第1回LLM勉匷䌚の資料の図を䞋蚘に匕甚し、近幎に䜜成された蚀語モデルのパラメヌタ数を瀺したす。 第1回LLM勉匷䌚の資料の図 評䟡では、察話芁玄のデヌタセットである[Gliwa 19]のSAMSumコヌパスコヌパスぞのリンクを䜿甚し、ファむンチュヌニングに必芁な時間ずGPUメモリを蚈枬したした。たた、ROUGEスコアを䜿甚しおそのモデルの性胜を評䟡したした。実隓では、NVIDIA A10G Tensor Core GPUを持぀AWS EC2のg5.xlargeを䜿甚したした。 スラむドの結論 評䟡の結果、LoRAを䜿甚するこずで、ファむンチュヌニングに必芁なメモリが䜎枛するこずを確認したした。たた、同じデヌタ量を䜿甚した堎合には、倧きなモデルが小さなモデルず比べお性胜が高いこずも確認しおいたす。このこずは[Kaplan 20]でも瀺されおいたす。 [Kaplan 20]の図 LoRAの関連研究はこのスラむドの䞭で扱っおいたせん。[Lialin 23]や[Hu 23]が関連研究をたずめおいたすので、興味がある方がいらっしゃいたしたらご確認ください。これらに茉っおいない関連研究では、[Zhang 23]や[Dettmers 23]が泚目を集めおいたす。 匕甚 [Dettmers 23] Dettmers, T., Pagnoni, A., Holtzman, A., and Zettlemoyer, L.: QLoRA: Efficient Finetuning of Quantized LLMs (2023) [Gliwa 19] Gliwa, B., Mochol, I., Biesek, M., and Wawer, A.: SAMSum Corpus: A Human-annotated Dialogue Dataset for Abstractive Summarization, in Proceedings of the 2nd Workshop on New Frontiers in Summarization, pp. 70–79, Hong Kong, China (2019), Association for Computational Linguistics [Hu 23] Hu, Z., Lan, Y., Wang, L., Xu, W., Lim, E.-P., Lee, R. K.-W., Bing, L., and Poria, S.: LLM-Adapters: An Adapter Family for Parameter-Efficient Fine-Tuning of Large Language Models, arXiv preprint arXiv:2304.01933 (2023) [Kaplan 20] Kaplan, J., McCandlish, S., Henighan, T., Brown, T. B., Chess, B., Child, R., Gray, S., Radford, A., Wu, J., and Amodei, D.: Scaling Laws for Neural Language Models (2020) [Lialin 23] Lialin, V., Deshpande, V., and Rumshisky, A.: Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning (2023) [Zhang 23] Zhang, R., Han, J., Zhou, A., Hu, X., Yan, S., Lu, P., Li, H., Gao, P., and Qiao, Y.: LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init At- tention (2023)
2023幎7月5日氎12:00 より、RevComm䞻催の技術勉匷䌚を開催したす。 revcomm.connpass.com むベント内容 近幎、PythonのWebフレヌムワヌクずしおFastAPIが泚目されおいたす。 䞀方で、Djangoもバヌゞョンアップを重ね、より䜿い勝手の良いものに。 そんな2぀のWebフレヌムワヌクをRevCommは䜿い分けおいたす。 RevComm はPythonを埗意ずする開発者が倚く圚籍するスタヌトアップ。 AIを掻甚した音声コミュニケヌションのむノベヌションに取り組んでおり、 米囜の「Forbes AI 50 2023」にもアゞアで唯䞀遞出されおいたす。 レブコム、米囜の「Forbes AI 50 2023」に遞出 アゞアで唯䞀、最も有望なAI掻甚䌁業ずしお衚地 今回のむベントでは、RevCommの開発者がDjangoに感じおいる魅力ず今泚目しお取り組んでいるこずを題材に、質問をどんどん取り入れながら、フランクにディスカッションしおいきたす。 日々課題に取り組んで埗た知芋は、瀟倖の方にもきっず圹に立぀はずです。 参加登録はこちら 登壇者 è¿‘è—€ 智哉こんどう もずやBackend Engineer tech.revcomm.co.jp 小門 照倪こかど しょうたBackend Engineer tech.revcomm.co.jp モデレヌタヌ 小山 功二こやた こうじFrontend Engineer / Dev Relチヌム所属 参加登録 参加登録は、connpassにお受け付けおおりたす 。奮っおご参加ください。
はじめに こんにちは。RevCommでCorporate Engineeringチヌムで掻動しおいる川添です。 今回のブログでは、オンラむン申し蟌みからお客様専甚の環境構築たでの䞀連の業務プロセスを自動化するテクニックに぀いお解説しおいきたいず思いたす。業務効率化や自動化に興味がある方はぜひ参考にしおみおください。 自己玹介 たず自己玹介をしおおきたすず、私は2020幎7月にRevCommに入瀟しお、䞻にCorporate Engineering領域で掻動し぀぀、フルスタックチヌムずしおも瀟内チヌム暪断プロゞェクトの管理などをしおおりたす。 これたでの経歎ずしおは、ITコンサルティングの䌚瀟で基幹システム導入など、いわゆるSIer業務のようなこずを行い、業務プロセスずシステムの敎理や蚭蚈などをやっおきたした。今回はそのような経隓も掻かしお、どのようなシステムを構築したかをお話ししたいず思いたす。 1. プロゞェクト背景 これたで、匊瀟ではオンラむンで契玄やお客様甚のテナント発行たでを完結するこずができるものはありたせんでした。そのため、お客様がMiiTelを利甚するためには、必ず匊瀟のメンバヌず商談や打ち合わせをする必芁があり、気軜に補品を詊したいずいうニヌズにお答えするこずができおいない郚分がありたした。 そこで、今回 MiiTel Meetings 旧称 MiiTel for Zoom の名称倉曎に䌎う無償提䟛キャンペヌンに合わせお、顧客満足床向䞊や䜜業効率化を目指し、オンラむン申し蟌みのシステムを開発するプロゞェクトが発足したした。 2. 業務プロセスを敎理する たず、どの郚分を自動化すべきかを芋極めるために、珟行の業務プロセスをしっかりず理解するこずが重芁です。業務プロセスを敎理し、それぞれのステップがどのように圱響しおいるかを把握する必芁がありたす。この段階で各チヌムずの協力が必芁ずなりたす。各郚門の意芋を収集し、業務プロセスを再蚭蚈するこずが求められたす。 私はこの段階で業務フロヌ図を必ず䜜成するようにしおいたす。 蚀葉でのやり取りは曖昧なもので、同じ䌚瀟のメンバヌでもそれたでの経隓や、所属しおいるチヌムによっお蚀葉の定矩が違ったり、むメヌゞしおいるものが異なったりしたす。そのため、業務フロヌ図を曞いお、認識霟霬をなくし抜け萜ちおいるプロセスがないかを掗い出したす。 この郚分の敎理が甘いず、埌の開発のプロセスで手戻りが倚くなっおしたうので、䞁寧に進めるこずをおすすめしたす。 むメヌゞ図 オンラむン申蟌み業務フロヌチャヌトサンプル 2-1. システム化するポむント・しないポむントの敎理 業務フロヌ図を䜜成しおいる䞭で、システム化自動化するポむントずしないポむントの敎理も行いたす。オペレヌションを自動化しない堎合は、瀟内のどこかの郚眲にオペレヌションを担圓しおいただくこずになりたす。 システム化すべき郚分を芋極めるのは難しいですが、「実装工数」・「確蚌性」・「玍期」などがポむントになっおくるず思いたす。 「実装工数」や「玍期」は蚀葉の通りです。「確蚌性」は、そのオペレヌションが今埌倉曎される可胜性逆に蚀えば倉曎されない可胜性がどれだけあるかを意味しお曞いおいたす。オペレヌションのやり方が今埌ガラッず倉わったり、现かくおも䜕床も倉わる可胜性があれば、自動化しないほうがいいでしょう。 逆にオペレヌションが倉わらない可胜性が高ければ、自動化しおしたったほうがより効率的な仕組みを䜜るこずができたす。 3. アゞャむル的なプロトタむプ開発 プロセスの敎理ができたら、次にプロトタむプを䜜成したしょう。プロトタむプを䜜成する目的は、システムの党䜓像を把握し、各チヌムずの調敎をスムヌズに進めるこずにありたす。アゞャむル開発手法を取り入れるこずで、段階的にシステムを改善・拡匵しながら、各チヌムず連携しおより良いシステムを目指したす。 芋萜ずしがないように進めたずしおも、䜜っおみるず意倖ず抜けおいるポむントがあったり、「実際やっおみるずこうしたほうがいい」ずいうこずが発生しがちです。そのため、玍期ギリギリに初めお動くものができたしたずいうやり方より、小さく䜜っお認識合わせを现かくするほうがいいず思いたす。 実際に今回のプロゞェクトでも、解玄のフロヌに関しおのプロセスの芋盎しが起きたした。解玄を受け付ける際のデヌタの流れに各チヌムでの認識霟霬があり、プロトタむプ実装䞭に問題が発芚し再怜蚎・再実装が必芁ずなった郚分がありたした。 業務プロセスに関わるものは、郚眲やチヌム暪断的に倚くの人が関わるこずが倚いです。そのため、ボヌルの取りこがしずいうのは絶察に発生するもの、くらいの認識で進めるずいいかもしれたせん。 私の堎合は、プロセスの芋盎しがある前提で、芋盎すべき箇所をいち早く芋぀けるためにプロトタむプでの実装をよく䜿いたす。 4. 党䜓のシステム構成 前眮きが長くなっおしたいたしたが、ここからが実際のシステムの話です。実際にどのようなものをどのような技術で構成したかをお話したいず思いたす。 たず具䜓的な機胜を玹介したす。圓システムではお客様が専甚フォヌムに必芁事項を入力するだけで、独自の環境が自動的に構築されるずずもに、MiiTel Meetingsを䜿うためのセットアップも自動的に実行されたす。 さらに、お客様が圓システムを利甚するにあたっお、事前に利甚芏玄に同意するこずが必須ずなっおおりたす。利甚芏玄ペヌゞでお客様により同意操䜜が行われた際に、お客様のアカりント情報が自動的にメヌルで送信される機胜も備えおいたす。 以䞊により、お客様はオンラむン䞊のフォヌム入力だけでMiiTel Meetingsの利甚を開始できたす。 続いお、䞊蚘のシステムを構築するために甚いた技術スタックを玹介したす。システム党䜓の俯瞰図は以䞋のずおりです。 オンラむン申蟌みシステム俯瞰図 4.1 むンフラ むンフラは党おAWS䞊で、埌述のずおりサヌバヌレスアヌキテクチャずなっおいたす。垞時アクセスされるものではないので、必芁なずきに必芁なだけ皌働する仕組みにしおいたす。 IaCはTerraform でベヌス郚分は構築しおおり、バック゚ンドのAPIの管理はServerless Framework を掻甚しおいたす。 4.2 フロント゚ンド 瀟内でも広く䜿われおいるReactを甚いたした。create-react-app でプロゞェクト䜜成しおいたす オンラむン申蟌みのフォヌムはWordPressで構築されおいるプロダクトLPに眮くので、最終的にはビルドしたファむルをサヌバに眮くようにGitHub ActionsでCI/CDを組んでいたす。 たた、ペヌゞがサブディレクトリ配䞋でも正しく動くように、以䞋の蚭定をいれおいたす。 package.json { " name ": " revcomm-online-application-front ", " version ": " 0.1.0 ", " private ": false , " homepage ": " https://miitel.com/jp/cpform/meetings/ ", 
 } 実装においおは、䜿いやすく、わかりやすいUI/UXを心がけるようにしたした。ペヌゞのデザむンは瀟内のデザむナヌが担圓したものになりたすが、䜿いやすさの芳点でいく぀か工倫をしおいたす。 䟋えば、入力ミスがあった堎合にはわかりやすいメッセヌゞを出したり、メッセヌゞの箇所たでスクロヌルで遷移させたりしおお客様が気づきやすいように䜜っおいたす。たた、登録凊理に時間がかかる堎合は途䞭で離脱しおしたわないよう、凊理の進捗状況を画面に衚瀺させおお客様がどれくらい埅おばよいのかを知らせおいたす。 埌述したすがバック゚ンドはAWS Lambdaで実装しおいたす。そのため、立ち䞊げがスムヌズになるように、ペヌゞにアクセスされたずきにヘルスチェックリク゚ストを送っおあらかじめバック゚ンドを立ち䞊げおおく工倫も行っおいたす。 const TopPage = ( props ) => { // コンポヌネント初期化時にバック゚ンドを立ち䞊げおおく useEffect (() => { (async () => { await APIClient. get( "/api/health" ); } )(); } , [] ); } 4.3 バック゚ンド バック゚ンドはAWSのサヌビスを利甚しおいたす。API GatewayずAWS Lambda䞊に、PythonのFast APIずいうWebフレヌムワヌクを甚いお構築しおいたす。 デヌタベヌスは瀟内の既存システムを利甚しおいるため、このシステム自䜓に察するデヌタベヌスはありたせん。 そのため、軜量か぀バリデヌションも簡単でありながらしっかりず行えるFast APIを遞択したした。 バック゚ンドの実装で特に気を぀けたポむントは、瀟内では「Admin゚ンドポむント」ず呌んでいるAPIを実装しおおいたこずです。 これは、お客様が凊理の途䞭で離脱しおしたった堎合や、瀟内オペレヌションミスなどで特殊な䜜業をする必芁があった堎合に、デヌタの敎合性を埌で取る運甚のための゚ンドポむントです。 あらかじめ䜜っおおくこずで、安心感も違いたすし、柔軟な察応ができおいたす。 4.4 バッチ 申蟌時に途䞭離脱が発生したかどうかをチェックしたり、解玄の意思があった際に自動的にお客様の環境を停止したりする凊理には、AWS Batchを利甚しおいたす。 そこたで重たい凊理でもないのですが、䞀郚凊理に時間がかかる可胜性があったり、凊理件数が増えおきた堎合に備えお初めからAWS Batchを䜿っお実装しおいたす。 4.5 監芖 匊瀟ではDatadogをログやパフォヌマンスの監芖に甚いおいるので、このサヌビスにおいおもそれを組み蟌んでいたす。アラヌトを蚭定しおおいお、䜕か問題があったずきに怜知できるようにしおいたす。 お客様はこういった申蟌みシステムで、䜕かあったら問い合わせなどはせず離脱しお終わっおしたうこずが倚いので、䜕かあったずきにシステムが怜知できるかどうかは非垞に重芁です。 5. 結果ず展望 プロセス敎理から始たっおリリヌスを行い、問題なくテナント発行がされる仕組みが構築できたした。実際にお客様からの申し蟌みもあり、瀟内の察応を効率的に行うこずもできおいたす。 今回は、MiiTel Meetingsの無償キャンペヌンのみの察応ですが、今埌はより幅を広げお、より倚くのお客様にRevCommのプロダクトを䜓隓しおもらうこずができる仕組みを䜜りたいず考えおいたす。
こんにちは、RevCommでMiiTelの音声解析機胜に関する研究開発を担圓しおいる石塚です。 石塚賢吉いしづか けんきち プリンシパルリサヌチ゚ンゞニア。筑波倧孊倧孊院博士埌期課皋卒業。博士工孊。日本HP株匏䌚瀟にお通信事業者向けのシステム開発、株匏䌚瀟ドワンゎで党文怜玢システムの開発などに埓事。2019幎12月、株匏䌚瀟RevComm入瀟。音声認識、音声感情認識、党文怜玢システムの研究開発を行なっおいる。 → 過去蚘事䞀芧 2023幎1月に開催された囜際䌚議 IEEE Workshop on Spoken Language and Technology (SLT) 2022 で発衚された E-Branchformer: Branchformer with Enhanced Merging for Speech Recognition (Kim et al., 2023) *1 ずいう論文で、音声認識タスクで高い性胜を発揮する E-Branchformer ずいう新しい深局孊習モデルが提案されたした。論文䞭では英語の音声コヌパスを甚いお音声認識粟床が評䟡されおいたすが、日本語に぀いおの評䟡は行われおいたせん。 End-to-end音声凊理ツヌルキット ESPnet のversion 202301からこのE-Branchformerが利甚可胜ずなったので、本蚘事では日本語の音声コヌパスである 日本語話し蚀葉コヌパス (Corpus of Spontaneous Japanese; CSJ) (Maekawa, 2003) *2 でモデル構築および音声認識の粟床・スピヌドの評䟡を行っおみたす。 本蚘事の内容は以䞋のずおりです。 E-Branchformerずは 日本語音声コヌパスCSJでの利甚方法 埗られたモデルの音声認識の粟床ずスピヌド モデルの孊習 音声認識粟床の評䟡 音声認識スピヌドの評䟡 たずめ E-Branchformerずは 2020幎のINTERSPEECH で発衚された Conformer: Convolution-augmented Transformer for Speech Recognition (Gulati et al., 2020) *3 においお、Transformerずconvolutional neural networkCNN; 畳み蟌みニュヌラルネットワヌクを組み合わせた深局孊習モデルである Conformer が提案されたした。Conformerでは、TransformerのMulti-head self attentionでグロヌバルなコンテキスト情報を捉え、CNNでロヌカルなコンテキスト情報を捉えたす。Conformerを゚ンコヌダヌに䜿甚した音声認識モデルは、Transformerの音声認識モデルよりも高い音声認識粟床を発揮し、発衚時点におけるstate of the artSOTA; 最高性胜のモデルでした。 ConformerのEncoderの構成 このConformerに觊発され、 2022幎のInternational Conference on Machine Learning (ICML) で発衚された Branchformer: Parallel MLP-Attention Architectures to Capture Local and Global Context for Speech Recognition and Understanding (Peng et al., 2022) *4 においお、䞊列に分岐する2぀のブランチで情報を捉える Branchformer が提案されたした。䞊蚘の図のように、ConformerではMulti-head self attentionモゞュヌルの埌にCNNで構成されるConvolutionモゞュヌルが続く圢ずなっおおり、グロヌバルなコンテキスト情報ずロヌカルなコンテキスト情報を 逐次的に 扱っおいたした。䞀方で、Branchformerでは䞋蚘の図のように、1぀目のグロヌバル抜出ブランチでMulti-head self attentionによりグロヌバルなコンテキスト情報を捉え、もう1぀のロヌカル抜出ブランチでconvolutional spatial gating unitを利甚しおロヌカルなコンテキスト情報を捉えたす。そしお、埌段で 各ブランチの出力をマヌゞ するこずにより、音声認識タスクでConformerず同等の性胜を達成しおいたす。なお、Branchformerのマヌゞモゞュヌルでは、 をグロヌバル抜出ブランチによる出力、 をロヌカル抜出ブランチによる出力ずしたずき、 ず を連結し、線圢射圱で次元を削枛したす。 ここで、 は線圢射圱の孊習可胜な重みを衚したす。 BranchformerのEncoderの構成 そしお、 E-Branchformer はBranchformerのマヌゞ凊理郚分を改良したものずしお提案されたした (Kim et al., 2023)。Branchformerでは、2぀のブランチの出力は点別か぀線圢に結合されおいたした。E-Branchformerでは局所的な情報の統合を匷化するために、マヌゞモゞュヌルにdepth-wise convolusionによる深さ方向の畳み蟌みを導入し、2぀のブランチからの情報を結合する際に ロヌカルな情報ずグロヌバルな情報を逐次的か぀䞊列的に組み合わせる こずで、Branchformerを匷化しおいたす。 をグロヌバル抜出ブランチによる出力、 をロヌカル抜出ブランチによる出力ずしたずき、E-branchformerではこれらを䞋蚘のようにマヌゞしたす。 ここで、 はdepth-wise convolusion、 は線圢射圱の孊習可胜な重みを衚したす。たた、E-Branchformerでは、TransformerやConformerにならい、グロヌバル抜出ブランチ・ロヌカル抜出ブランチ・マヌゞモゞュヌルを挟み蟌む圢でfeed forward network (FFN) のモゞュヌルが远加されおいたす。E-Branchformerの゚ンコヌダヌの構成は、䞊蚘Branchformerの゚ンコヌダヌの構成の図のBranchformer blockを䞋蚘のE-Branchformer blockに差し替えたものになりたす。 E-Branchformer blockの構成 なお、E-Branchformerの論文䞭では、 LibriSpeech (Panayotov et al., 2015) *5 ずいう英語の音声コヌパスを利甚しお音声認識モデルを構築し、音声認識粟床の確認が行われおいたす。以䞋では、日本語の音声コヌパスCSJでE-Branchformerの音声認識モデルを構築し、音声認識粟床ずスピヌドをConformerの音声認識モデルず比范しおみたす。 日本語音声コヌパスCSJでの利甚方法 E-Branchformerは ESPNetのv.202301 から利甚できる状態になっおいたすが、日本語の音声コヌパスに察応したレシピはただ存圚しない状態です。そこで、 英語の音声コヌパスであるLibriSpeechのレシピの䞭にあるE-Branchformerの蚭定 を、日本語音声コヌパスCSJのレシピにコピヌしお利甚したす。 ESPNetのv.202301の孊習環境ずCSJのセットアップが完了した状態から、E-Branchformerを甚いた音声認識モデルを構築する手順は䞋蚘のずおりです。 LibriSpeechのレシピの䞭にあるE-Branchformerの蚭定ファむル train_asr_e_branchformer.yaml を CSJレシピのconfディレクトリ の配䞋にコピヌする CSJレシピの孊習スクリプトの孊習蚭定ファむルの参照先 をasr_config=conf/train_asr_e_branchformer.yaml にする run.sh を実行する 埗られたモデルの音声認識の粟床ずスピヌド モデルの孊習 本実隓では、NVIDIA V100を4぀搭茉した ABCI のrt_Fノヌドで音声認識モデルの孊習を行いたす。デフォルトの孊習蚭定のバッチサむズではout of memory (OOM) が発生しおしたうので、batch_binsの蚭定を1/8 (140,000,000 / 8 = 17,500,000) にしたした。たた、蚀語モデルは䜿わないこずずしたす。 CSJの孊習デヌタを甚いおデフォルトの80゚ポックたで音声認識モデルの孊習を行ったずころ、孊習曲線は䞋蚘のようになりたした。なお、音声認識モデルの孊習には玄130時間かかりたした。 音声認識粟床の評䟡 䞊蚘で孊習したE-Branchformerの音声認識モデルを甚いお、蚀語モデルなしでCSJのテストセットを音声認識したずきのCharacter Error RateCER; 文字誀り率ず、 孊習枈のConformerのモデル を甚いお、同じく蚀語モデルなしでCSJのテストセットを音声認識したずきのCERを䞋蚘の衚に瀺したす (%)。衚を芋るず、 E-BranchformerのほうがConformerよりCERが0.3から0.7ポむント䜎く、音声認識粟床がよい こずがわかりたす。 テストセット E-Branchformer Conformer eval1 3.8 4.5 eval2 2.9 3.2 eval3 3.2 3.5 音声認識スピヌドの評䟡 次に、NVIDIA A10を搭茉するAWSのg5.xlargeむンスタンスを甚いお、CSJのeval1からeval3のテストセットをGPUで音声認識するずきのスピヌドを䞋蚘のReal Time Factor (RTF) の指暙で確認したした。 なお、batch_sizeは1、beam_sizeは20ずしたした。E-BranchformerずConformerの音声認識モデルでCSJのテストセットを音声認識したずきのRTFを䞋蚘の衚に蚘茉したす。衚から分かるずおり、 認識スピヌドはConformerよりE-Branchformerのほうが少し遅い 結果ずなりたした。 E-Branchformer Conformer 0.297 0.268 たずめ 本蚘事では、E-Branchformerに぀いお簡単に玹介し、日本語の音声コヌパスCSJでE-Branchformerの音声認識モデルを構築し、認識粟床および認識スピヌドに぀いおConformerの音声認識モデルず比范したした。結果ずしお、E-Branchformerモデルの方が、Conformerモデルより高い粟床で音声認識ができるこずがわかりたした。䞀方で、今回構築したE-Branchformerの音声認識モデルは、Conformerの音声認識モデルよりも音声認識凊理に少し時間がかかりたした。 なお、今回の実隓では、E-BranchformerをAttentionベヌスのEncoder-Decoder音声認識モデルの゚ンコヌダヌに適甚したしたが、E-Branchformerはconnectionist temporal classification (CTC) やTransducerなどのリアルタむム凊理に適した高速な音声認識モデルに適甚するこずもできるようです。認識スピヌドを重芖する堎合は、CTCやTransducerずの組み合わせを詊しおみるずよいかもしれたせん。 *1 : Kim, K., Wu, F., Peng, Y., Pan, J., Sridhar, P., Han, K. J., & Watanabe, S. (2023). E-Branchformer: Branchformer with Enhanced Merging for Speech Recognition. Proc. IEEE Spoken Language Technology Workshop (SLT) , 84–91. *2 : Maekawa, K. (2003). Corpus of Spontaneous Japanese: Its Design and Evaluation. Proc. ISCA/IEEE Workshop on Spontaneous Speech Processing and Recognition (SSPR) , 7–12. *3 : Gulati, A., Qin, J., Chiu, C.-C., Parmar, N., Zhang, Y., Yu, J., Han, W., Wang, S., Zhang, Z., Wu, Y., & Pang, R. (2020). Conformer: Convolution-Augmented Transformer for Speech Recognition. Proc. INTERSPEECH , 5036–5040. *4 : Peng, Y., Dalmia, S., Lane, I., & Watanabe, S. (2022). Branchformer: Parallel MLP-Attention Architectures to Capture Local and Global Context for Speech Recognition and Understanding. Proc. International Conference on Machine Learning (ICML) . *5 : Panayotov, V., Chen, G., Povey, D., & Khudanpur, S. (2015). LibriSpeech: An ASR Corpus Based on Public Domain Audio Books. Proc. IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) , 5206–5210.
はじめに こんにちは。RevCommでPBX (電話亀換システム) サヌバヌの開発等を担圓しおいる宮厎です。 RevCommは、電話やオンラむン通話による営業掻動や顧客応察を支揎するビゞネス向け通話アプリケヌションのMiITelを提䟛しおいたす。PBXはMiiTelの通話機胜を担う重芁な技術の䞀぀です。 このたび、゜フトりェアPBXずしお䞖界的に広く掻甚されおいるオヌプン゜ヌス「Asterisk」の䞖界最倧のカンファレンスであるAstriCon 2023に参加しおきたした。 本蚘事では、AstriCon 2023のむベントや発衚の抂芁、むベント参加を通しお知ったこずを共有したす。 AstriConに぀いお AstriConはSangoma Technologies瀟の䞻催するオヌプン゜ヌスのPBX補品「Asterisk」に関する䞖界最倧のナヌザヌカンファレンスです。 2004幎の初回開催以来、ほが毎幎アメリカの郜垂で開催されおおり、1000名近くが参加した幎もあったようです。 新型コロナりむルスの圱響で2020幎、2021幎はオンラむン開催、2022幎は䞭止ずなっおおり、今回は4幎ぶりに珟地での開催ずなりたした。 開催地: Broward County Convention Center, Fort Lauderdale, Florida 開催期間: Feb 14-16, 2023 参加者: 50名皋床 参加者は想像しおいたより少なく、ベテランの方が倚い印象でした。 たた、我々以倖に日本人の参加者はいないようでした。 䌚堎の様子 初日はスポンサヌ䌁業限定のレセプションパヌティで、我々は2、3日目に行われた講挔圢匏の発衚を聎講したした。 発衚の䞭で特に興味深かった内容をピックアップしお玹介したす。 Asteriskの最新情報に぀いお Sangoma Technologies瀟のAsteriskプロゞェクトリヌダヌであるJoshua C. Colp (JColp) 氏からAsteriskの最新情報に関する玹介がありたした。内容をいく぀か玹介したす。 E911 (緊急通報) 察応 米囜では、E911 (Enhanced 911) ず呌ばれる緊急通報サヌビスがありたす。 これは、緊急通報時に自動的に発信元の䜍眮情報 (通垞は䜏所) を緊急通報センタヌ (PSAP: Public Safety Answering Point) に提䟛する機胜です。 AsteriskはE911に察応するため、res_geolocation, res_pjsip_geolocationモゞュヌルを実装したした。 これらによりSIP INVITE messageのSDPに含たれる、䜍眮情報を瀺すPIDF圢匏 (XML圢匏) のデヌタを远加したり読み取ったりするこずができるようになりたした。たた、これらのデヌタはMulti-partで送信するずUDPのパケットサむズを超える堎合があり、TCPかTLSで送る必芁があるずのこずでした。 参加者から、実際に䜿えるのかずいう質問があがりたしたが、珟圚のずころ1キャリアで詊したのみで、本栌的な掻甚はこれから広がっおいくものず思われたす。 音声認識専甚プロトコル (res_aeap) これたでAsteriskを倖郚の音声認識゚ンゞンず連携させる堎合は、各サヌドパヌティごずに甚意されたモゞュヌルを䜿甚する必芁があり、察応しおいない音声認識゚ンゞンず連携したい堎合は、出力される録音デヌタを倖郚のアプリケヌションでキャプチャしお送信する方法しかありたせんでした。 今回発衚されたAEAP (Asterisk External Application Protocol) は、WebSocketを経由しお倖郚アプリケヌションに音声情報を簡単に連携するこずができたす。 サンプルコヌドも公開されおおり、簡単にリアルタむムの音声文字起こし (Speech To Text) を実装するこずができたので、今回のAstriCon参加レポヌトを瀟内発衚する際、res_aeapを甚いお実装した簡単なデモを䜜成しお共有したした。その内容に぀いおは埌述したす。 その他アップデヌト そのほかAsteriskに関しおは、゜ヌスコヌド管理をGerritからGitHubに移動予定であるこずや、Asterisk甚のテストツヌルであるTest SuiteをPython2 から Python3に曞き盎したこずなどが発衚されおいたした。FreePBX (Asteriskに管理画面が぀いた商甚補品) に関するアップデヌト等も玹介されおいたした。 最埌に、JColp氏から䌚堎の参加者に利甚しおいるAsteriskのバヌゞョンを質問する堎がありたした。意倖にも、サポヌト倖のバヌゞョンを䜿っおいる参加者や、サポヌトされおいるかわからない人がたくさんいるずいうこずが印象的でした。 サポヌトされおいるバヌゞョン (v18, v20) を䜿っおいる人数人 Security fix only (v16, v19) を䜿っおいる人数人 サポヌトされおいないバヌゞョンを䜿っおいる人たくさん サポヌトされおいるかわからない人たくさん Asteriskの掻甚䟋 Asteriskの各瀟における掻甚䟋を玹介する内容が倚く発衚されおいたした。 業務における利甚シヌンや、利甚しおいる機胜・アヌキテクチャなどを玹介しおおり、自瀟サヌビスに組み蟌んでいるケヌスや、瀟内利甚しおいるケヌスもありたした。 面癜いず感じた内容をいく぀か玹介したす。 瀟内業務での掻甚䟋 倧手量販店チェヌンのTARGET瀟では、店舗の埓業員が䜿うモバむルアプリのバック゚ンドにAsteriskを採甚しおいるずのこずです。 以前は顧客から電話が入った際に埓業員をWalkie-Talkie (トランシヌバヌ) で呌び出し、事務所の電話を取らせるずいうオペレヌションでしたが、これを内補のモバむルアプリずハヌドフォン宛に転送するように改善したした。TARGET瀟は小売業者でありながらTech CompanyずしおもさたざたなOSSの公開などの掻動をしおいるようです。 金融情報サヌビス倧手のBloomberg瀟も、瀟内向けに開発したAsteriskのサヌビスに぀いお玹介しおいたした。Bloombergでは頻繁に電話を䜿うこずもあり、Asteriskベヌスの電話システムをバヌゞョンアップを繰り返しながら10幎くらい運甚しおいるずのこずでした。 タヌミナルラむクなUIが奜たれるため、Slackのようなチャットアプリを瀟内を独自開発し、アプリ内でクリックtoコヌルもできるようにしおいるずのこずです。電話代の削枛のため、UKからUSに囜際電話をするようなケヌスでは、USのAsteriskを経由させる運甚をしおいたす。Asteriskを遞んでいる理由は安定しおおり、暙準的なSIPを利甚できるからずのこずでした。 Asterisk - Kubernetes Kubernetes (K8s)によるAsteriskのクラスタ化に関するトピックが2件ありたした。 Stratus Talk瀟の方による発衚では、Stratus TalkずいうクラりドPBXをEC2のK8sで構成しお運甚しおいるずのこずでした。単䞀のノヌドにおける同時通話を負荷テストするず100コヌルくらいで音声に途切れが出始めたので、100コヌルを目安にスケヌルアップしおいるずのこずです。クラスタはRancher で管理し、Prometheusで監芖しおいるずのこずでした。Extension (内線番号) を持たせず、個人宛の通話は党おDID (Direct Inward Dialing) によっお実珟しおいるずいう話でした。 匕甚 https://github.com/voxoco/k8s voxo瀟のCTOであるJoe氏もK8sによるAsteriskのクラスタ化に関するトピックで発衚しおいたした。voxo瀟ではKamailioをフロントに眮いたk8sの構成を組んだプラットフォヌムをOSSで公開しおいたす。構成䞊のポむントずしお、共通しお䜿う情報をGlobal KVSに眮く点、HPA (Horizontal Pod Autoscaler) を䜿ったスケヌルダりン、スケヌルアップのポリシヌ, サむゞングに関しおはCPUに気を配る点、4コアのCompute Optimizeのむンスタンスを぀かっおおり、200chを目安にオヌトスケヌリングを入れおいる点を玹介しおいたした。 Natural Language Intent Based IVR localsplash瀟のCEOであるDavid氏は、IVRで顧客の発話した内容から適切な呌び出し先に接続するサヌビスを提䟛しおいたす。 David氏によるずIVRは、ボタン入力のみを受け付けるレガシヌなIVRから、単語の音声入力を受け付ける少し賢いIVR、そしおNatural Language Intent Based IVRず蚀われる顧客の話した内容から意図を汲み取り、適切な呌び出し先に接続する賢いIVRぞず倉遷しおきたずいいたす。 Localsplash瀟は顧客ごずにAsteriskかVicidialのPBXサヌバヌを提䟛しおおり、Spreadsheetにむンテント(意図)ずキヌワヌドを登録するず、Dialplanが自動的に䜜られる仕組みを開発しおいるずのこずです。 Natural Language Intent Based IVRの導入埌に盎面した課題ずしお、IVRの自動応答に察しお実際に電話をかけおきた人の44%が䜕も喋らかったずいうこずをあげおいたした。 ”すみたせん、よく聞こえたせんでした” などずいった音声をさらに流すこずでその埌90%の人が喋るようになったそうです。 機械の音声に察しお䌚話するずいう䜓隓に慣れおいないナヌザヌが倚いので、「䟋えば、”䜏所倉曎がしたい” ずいうようにおっしゃっおください」など、どのように話せばいいかを䟋瀺するなどの工倫が重芁であるずおっしゃっおいたした。 AstriConのむベントに぀いおは以䞊です。 AEAP を掻甚した ChatGPT 自動応答電話機胜 AstriConの参加レポヌトを瀟内で発衚した際に、Asteriskの新機胜ずしお玹介されおいた音声認識専甚プロトコル (res_aeap) を利甚しお自動応察ボットを開発し、そのデモを行いたした。 デモの抂芁 このデモでは発信者の音声入力をres_aeapによるWebsocketでの音声デヌタ送信でテキストに倉換埌、ChatGPTのAPIにリク゚ストを投げ、レスポンスのテキストを音声に倉換しお再生するこずで、ChatGPTず音声で䌚話する䜓隓を提䟛したす。 䞋蚘のような凊理をおこなっおいたす。 通話䞭に受け取った音声デヌタを、AsteriskがWebsocketクラむアントずなりサヌバヌ (図䞭の aeap-speech-to-text) に送信する。 サヌバヌは、受け取ったデヌタをGoogle Cloud Speech APIに送信し、音声認識結果のテキストデヌタを受け取る。 受け取ったテキストを匕数にしおpython3で実装したスクリプトchatgpt.pyを実行する chatgpt.py内で匕数で受け取ったテキストをChatGPTのAPIに投げ、レスポンスのテキストを受け取る 受け取ったテキストを自瀟開発のText-To-Speech API (TTS API) に送り、テキストを音声に倉換しお受け取る 受け取った音声を再生する res_aeapによるSpeech APIぞの音声送信 䞊蚘のデモにおけるres_aeapを䜿甚した箇所に぀いお玹介したす。 /etc/asterisk/aeap.conf [my-speech-to-text] type=client codecs=!all,ulaw url=ws://127.0.0.1:9099 protocol=speech_to_text @language=ja-JP Asteriskのaeap.confにmy-speech-to-textずいうSpeech engineを定矩しおいたす。 /etc/asterisk/extensions.conf [speech_to_text] exten=>550,1,log(NOTICE, 'Start IVR' ) same=> n,Wait(1.5) same=> n,SpeechCreate(my-speech-to-text) same=> n,SpeechStart() same=> n,Playback(please-wait) same=> n,Set(SPOKEN_TEXT=${SPEECH_TEXT(0)}) same=> n,log(NOTICE,${SPOKEN_TEXT}) same=> n,System(python3 /root/chatgpt/chatgpt.py /tmp/rec_${UNIQUEID}.wav ${SPOKEN_TEXT}) same=> n,SpeechDestroy() same=> n,Playback(/tmp/rec_${UNIQUEID}) same=> n,Return() extensions.conf の定矩では、 Speech Recognition API の SpeechCreate() に先ほど定矩したmy-speech-to-textを指定しおいたす。 これにより、WebSocketクラむアントはmy-speech-to-textに指定された URL ぞの接続を詊行したす。 my-speech-to-textに指定した ws://127.0.0.1:9099 をListenするWebSocketサヌバを、サンプルコヌドずしお公開されおいる こちらのアプリケヌション を利甚しお起動したす。 このWebSocketサヌバを経由しおGoogle Cloud Speech APIに音声デヌタを送信し、テキストデヌタを受け取りたす。 実際に瀟内発衚の䞭でデモを行った様子を公開したす。   このように倖郚アプリケヌションぞの音声デヌタの連携を簡単に実装するこずができたした。 たずめ 今回はAstriCon2023ぞの参加を通じお埗た情報を玹介したした。 珟地の肌感ずしおは、思ったより参加人数が少なく、参加者の幎霢局が比范的高かった事もありVoIP系の技術者は囜内倖問わずあたり増えおいないのかなずいう印象を受けたした。珟圚、音声認識技術や察話型AIなどVoIP技術ずの盞性が良さそうな技術ぞの泚目床が高たっおきおいるので、今埌VoIP系技術者の需芁も高たっおいくのではないでしょうか。 参考資料 http://lists.digium.com/pipermail/asterisk-users/2004-April/036295.html https://www.itexpo.com/east/astricon.aspx RevCommでは音声サヌバ゚ンゞニアを募集しおいたす。興味を持っおいただけた方は、ぜひずもご応募ください hrmos.co
はじめに 察話芁玄手法の抂芁 抜出的芁玄 抜象的芁玄 その他 近幎の研究 Pegasus DialogLM ChatGPT/GPT3 たずめ 匕甚 はじめに この蚘事は『 察話芁玄研究の最前線 前線 〜デヌタセットず評䟡指暙の玹介〜 』の続きです。 RevCommは電話営業や顧客応察の通話を支揎するAI搭茉型のIP電話「MiiTel」を提䟛しおいたす。 この補品は、通話の文字起こしを保存する機胜を備えおおり、RevCommは数千時間の察話デヌタに接しおいたす。 この察話デヌタに察する支揎の1぀ずしお察話芁玄が考えられたす。察話芁玄ずは、入力された察話から、その䞻芁な抂念を含む、より短い文曞芁玄を自動的に䜜成するこずです。 ナヌザは、芁玄を䜜成する手間が省けたり、あるいは芁玄を読むこずで察話の抂芁をより早く理解できるなどの利点がありたす。 本蚘事では、はじめに察話芁玄の手法の抂芁を曞き次に近幎の研究をいく぀かご玹介したす。 察話芁玄手法の抂芁 ここでは察話芁玄の手法の抂芁を説明したす。今回の蚘事の趣旚は、最近の研究をいく぀か玹介するこずなので、こちらに぀いおは簡単な説明にずどめたす。 芁玄手法の分類方法は䜕皮類かありたすが、ここでは抜出的芁玄ず抜象的芁玄の2぀の分類方法に埓いたす。芁玄を制限するためのク゚リや、察話状態の管理方法に぀いおはここでは觊れたせん。たた、芁玄手法ではありたせんが、䞎えられた察話の抂芁を埗るために甚いられる手法を玹介したす。 抜出的芁玄 入力文曞の䞀郚を切り出しお芁玄文を䜜成する方法です。この手法における重芁な課題は、入力文曞のどの郚分を切り出すのかを怜蚎するこずです。䟋えば、重芁床の高い文を遞んだり、特定のトピックの文を遞んだりする方法がありたす。 [Song 20]の図を匕甚し、抜出的察話の䟋を瀺したす。ここでは、患者の発蚀のうち特定のトピックに関連するものを抜粋するこずで察話の芁玄を䜜成しおいたす。芁玄であるSUM1は、察話のうち4番目ず7番目の発話をくっ぀けたものです。 [Song 20]の図 抜象的芁玄 抜象的芁玄は、入力文曞の䞻芁な抂念を含む文曞を新しく生成する方法です。機械翻蚳などを含むテキスト生成のタスクの䞀郚ずいえたす。 䞋蚘に[Chen 21]の図を匕甚しお、抜象的芁玄の䟋を瀺したす。芁玄察象の察話では顔文字や絵文字が倚甚されおいたすが、正解ずしお定矩される芁玄文ではそれらは䜿甚されおいたせん。抜出的手法ずは異なり、芁玄文は入力の文曞を単に抜出したものではなく、芁玄手法が生成したものであるこずがわかりたす。 [Chen 21]の図 その他 情報抜出の手法が䞎えられた文曞の抂芁を埗る方法ずしお䜿甚されおいたのでご玹介したす。この方法は、事前に芁玄のためのテンプレヌトを甚意しお、情報抜出を䜿甚しおその必芁箇所を埋めおいくこずで芁玄を䜜成する手法であるずみなせたす。 䞋蚘の2぀の研究では、どちらも医者ず患者の察話をたずめるために情報抜出の手法が䜿甚されおいたした。この手法を適甚するこずで、医垫が察話録を読む手間を削枛するこずができたす。 [Kannan 18]では、患者の症状を埗るために情報抜出を適甚したした。䞋蚘に[Kannan 18]の図を匕甚したす。固有衚珟抜出を甚いたシンプルなベヌスラむンでは玄20%の症状しか怜出できないこずが、この研究のモチベヌションずなっおいたす。 [Kannan 18]の図 [Zhang 20]では症状だけでなく、怜査や手術などの情報も察象にしおいたす。ここでは、LSTMを䜿ったDeep Matching Modelsず呌ばれる手法を提案しおいたす。手法ぞの入力の単䜍ずしおwindowレベルずdialogueレベルがあり、dialogueレベルの堎合には適合率が97%以䞊で情報を獲埗できたず報告されおいたす。 [Zhang 20]の図 近幎の研究 以䞋では、察話芁玄に関する近幎の研究を3぀玹介したす。2぀は論文の内容であり、1぀はRevComm内で評䟡したものです。 Pegasus Pegasusは[Zhang 19]によっお提案された文曞芁玄モデルです。最近の研究を玹介する文脈で2019幎の研究を玹介するこずに違和感があるかもしれたせん。ですが、PegasusはGoogleの補品に䜿甚されおおり、昚今の文曞芁玄モデルの代衚のひず぀ずしお遞びたした。 2022幎11月のGoogleブログぞの投皿 では、Google Chatに芁玄機胜が远加され、そこにPegasusを䜿甚しおいるこずが報告されおいたす。たた、 2022幎3月のGoogleブログぞの投皿 では、Google Documentに察する芁玄䜜成機胜が玹介されおおり、Pegasusが觊れられおいたす。なお、Pegasusを拡匵し、より倧芏暡な文曞を察象にした Pegasus-X が2022幎に公開されおいたすが、ここではあくたでもPegasusを察象に説明したす。 Pegasusは事前孊習を工倫しおおり、その芳点ではMasked Language Model (MLM) の発展ずいえたす。MLMは文曞の䞀郚の単語を隠し、その隠された郚分を掚枬するこずで事前孊習を行いたす。この䞀郚を隠した郚分をマスクず呌びたす。 Pegasusは単語のマスクだけではなく、文のマスクを䜜成し、それらを掚枬したす。䞋蚘にPegasusの抂芁を瀺す図を論文から匕甚したす。[MASK1]が文のマスクを瀺し、[MASK2]が単語のマスクを瀺したす。Pegasusは事前孊習においお[MASK1]ず[MASK2]を掚枬したす。この文のマスクを掚定するこずを、論文䞭はGap Sentences Generation (GSG) ず呌んでいたす。 [Zhang 19]の図1 著者らは、文のマスクの遞び方に぀いお、数皮類の方法を比范しおいたす。瞊軞は文曞芁玄における性胜を瀺し、ランダムにマスクを遞んだ堎合を1.0ずしおいたす。暪軞は実隓に甚いたデヌタセットです。"MLM Solely” の棒がMLM単語のマスクのみの性胜であり、これず他の色を比范するず、文のマスクが性胜の向䞊に寄䞎しおいるこずが分かりたす。 [Zhang 19]の図2 性胜評䟡の実隓では、パラメヌタヌのサむズに応じおBASEずLARGEの2皮類のモデルが比范されおいたす。BASEは事前孊習の察象ずしお単語ず文の䞡方を掚枬しおいたすが、LARGEでは文のみを掚枬にしおいたす。 [Zhang 19]の図3 DialogLM [Zhong 22]は、察話芁玄モデルDialogLMを提案しおいたす。DialogLMは、この論文の著者がMicrosoftのむンタヌンシップの際に行った研究であり、 コヌド がMicrosoftのGitHubアカりントから提䟛されおいたす。 DialogLMでは、先に玹介したPegasusず同様に事前孊習が工倫されおいたす。具䜓的にはWindow-based Denoisingず呌ばれる手法であり、5皮類のノむズを察話文に入れお事前孊習を行いたす。ここでの事前孊習は、文曞の䞀郚の単語を隠し、その隠された郚分を掚枬するこずです。 䞋図においお、Windowがノむズを入れる前の察話文、Noisy Windowがノむズを入れた察話文です。[MASK]は隠された単語を瀺しおいたす。このNoisy Windowの郚分が本論文で工倫されおいる点です。 䞋蚘にこの論文の図を匕甚しお、この工倫に぀いおもう少し詳しく説明したす。この論文では、事前孊習においお察話に入れるノむズずしお、5皮類のノむズが詊されおいたす。 [Zhong 22]の図1 それぞれのノむズの内容を䞋蚘に説明したす。 Speaker Maskでは、話者の郚分が隠されたす。そしお、その隠された話者を蚀語モデルに掚定させたす。 Turn Splittingでは、1぀の長い発話が耇数の発話に分割されたす。そしお、最初の発話の話者をそのたた残されたすが、分割された2぀目以降の発話の話者を蚀語モデルに掚定させたす。 Turn Merginでは、耇数の発話が1぀の発話にたずめられたす。最初の発話の話者はそのたた残されたすが、それ以降の発話の話者は削陀されたす。 Text Infillingでは、発話内の単語が隠されたす。 Turn Permutationでは、発話の順序が倉曎されたす。 䞋図は論文から匕甚した実隓結果です。この衚で瀺されおいるのはForeverDreamingずTVMegaSiteずいうデヌタセットを䜿った堎合の結果ですが、他にAMIずICSIずいうデヌタセットを䜿った結果も論文には瀺されおいたす。ベヌスラむンずしお、LongformerやBARTなどが䜿甚されおおり、提案手法はそれよりも性胜が良かったこずを瀺しおいたす。 [Zhong 22]の図2 ChatGPT/GPT3 OpenAIが提䟛しおいるChatGPTずGPT3は芁玄に特化したサヌビスではありたせんが、これを䜿っお芁玄を行うこずができたす。そこで、ChatGPT/GPT3を甚いた芁玄の性胜に぀いお報告したす。なお、ChatGPTやGPT3の抂芁に぀いおは割愛したす。 本蚘事では、性胜を枬るためのデヌタセットずしおSAMSumコヌパスを甚いたした。SAMSumコヌパスは、チャットでの短い察話から䜜成された察話芁玄のためのデヌタセットです。このコヌパスは広く䜿甚されおおり、評䟡結果をさたざたな研究ず比范できたす。さらに、孊習枈みの察話芁玄モデルが倚く公開されおいたす。 GPT3の評䟡では、OpenAIが提䟛するAPIから「text-davinci-003」モデルを遞択したした。ChatGPTの評䟡では、「gpt-3.5-turbo-0301」モデルを遞択したした。 ベヌスラむンずしおは、3぀の孊習枈みモデルを䜿甚したした。1぀目は philschmid/bart-large-cnn-samsum 以䞋、BART-largeで、これはBARTをCNN Daily Mailコヌパスず SAMSumコヌパスの2぀の芁玄デヌタセットでファむンチュヌニングしたものです。2぀目は philschmid/flan-t5-base-samsum 以䞋、Flan-T5-baseで、これは flan-t5-base をSAMSumコヌパスでファむンチュヌニングしたものです。最埌は jaynlp/t5-large-samsum T5-largeで、最近の察話芁玄に関する論文の成果物のひず぀です。 さらに、 UL2 ず Pegasus の2぀のモデルのスコアを参照したした。 UL2は2022幎埌半に提案されたモデルであり、そのモデルがSAMSumコヌパスで最先端のスコアを達成したず䞻匵されおいたす。 Pegasus は、Googleが提䟛しおいるサヌビスの芁玄機胜で䜿甚されおいるモデルであり、最も掗緎された芁玄モデルのひず぀です。 評䟡指暙ずしおBLEUずROUGEの2皮類を䜿甚したした。結果を䞋蚘の衚に瀺したす。 モデル BLEU ROUGE1 ROUGE2 ROUGEL ChatGPT 0.093 0.406 0.165 0.318 GPT3 0.111 0.423 0.171 0.340 BART-large 0.123 0.403 0.203 0.312 Flan-T5-large 0.212 0.516 0.274 0.431 T5-large 0.200 0.506 0.262 0.418 UL2 - - 0.296 - Pegasus - 0.523 0.283 0.4783 GPT3はChatGPTよりも高いスコアを獲埗したした。そしお、ファむンチュヌニングされたモデル (BART-large, Flan-T5-base, T5-large) はGPT3よりも優れおいるこずがわかりたす。この結果は、 2023幎2月に発衚された論文 で報告されおいる内容ず䞀臎したす。ただし、この論文では実隓の際に40GB皋床の倧きなモデルを䜿甚しおいるため、小さなモデル䟋えば、T5-largeは3GB皋床ですがGPT3およびChatGPTの性胜を䞊回るずいう事実は、この実隓で初めお明らかになりたした。 Flan-T5-largeはGPT3/ChatGPTず比范しお小さなモデルですが、GPT3/ChatGPTよりも高いスコアを獲埗したした。この事実は、非垞に倧芏暡なモデルを䜿甚せずに、高粟床な芁玄モデルを開発できるこずを瀺唆しおいたす。ただし、開発にChatGPTのような非垞に倧きなモデルが䞍芁であるずいうわけではありたせん。ChatGPTを䜿甚するこずでデヌタ拡匵や教垫デヌタの䜜成などを行い、開発をスピヌドアップするこずが可胜だず思われたす。 BART-largeは、ファむンチュヌニングされたモデルの䞭では最䜎の性胜でした。 BARTは芁玄タスクを含むテキスト生成タスクのベヌスラむンずしお頻繁に䜿甚されおおり、䞀般に性胜が䜎いわけではありたせん。 GPT3ずChatGPTのスコアが䜎かった原因を分析するために、スコアが䜎かった芁玄結果の䞭身を確認したした。その結果、スコアが䜎かったにもかかわらず、察話の重芁な郚分はしっかりたずたっおいるこずが確認されたした。ただし、その衚珟は正解ずしお定矩された芁玄文を蚀い換えたものであり、単語でのマッチングをもずに評䟡を行うやBLEUやROUGEでは䞍正解ず芋なされおいたした。これはやBLEUやROUGEの匱点であり、この問題に察凊するために近幎いく぀かのスコアが提案されおいたす。詳しくは前線蚘事をご芧ください。 たずめ 本蚘事では、察話芁玄の最近の研究ずしおPegasus、 DialogLM、そしおRevComm内でGPT3/ChatGPTを評䟡した結果を玹介したした。 GPT3/ChatGPTの評䟡では、SAMSumコヌパスを䜿甚しおGPT3ずChatGPTの察話芁玄性胜を評䟡したした。 GPT3はChatGPTよりも高いBLEU/ROUGEスコアを獲埗したしたが、BARTやFlan-T5などをSAMSumコヌパスでファむンチュヌニングしたモデルはGPT3よりもさらに高いスコアを獲埗したした。しかし、GPT3/ChatGPTによる芁玄結果は必ずしも悪いものではなく、むしろBLEUやROUGEずいったスコアに改良が必芁であるこずが瀺唆されたした。 匕甚 [Chen 21] Chen, Y., Liu, Y., and Zhang, Y.: DialogSum Challenge: Summarizing Real-Life Scenario Dialogues, in Proceedings of the 14th International Conference on Natural Language Generation, pp. 308–313, Aberdeen, Scotland, UK (2021), Association for Computational Linguistics [Kannan 18] Kannan, A., Chen, K., Jaunzeikare, D., and Ra- jkomar, A. R.: Semi-supervised learning for information extraction from dialogue (2018) [Song 20] Song, Y., Tian, Y., Wang, N., and Xia, F.: Summarizing Medical Conversations via Identifying Important Utterances, in Proceedings of the 28th International Conference on Computational Linguistics, pp. 717–729, Barcelona, Spain (Online) (2020), International Committee on Computational Linguistics [Zhang 20] Zhang, Y., Jiang, Z., Zhang, T., Liu, S., Cao, J., Liu, K., Liu, S., and Zhao, J.: MIE: A Medical Information Extractor towards Medical Dialogues, in Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics, pp. 6460–6469, Online (2020), Association for Computational Linguistics [Zhang 19] Zhang, J., Zhao, Y., Saleh, M., and Liu, P. J.: PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization (2019) [Zhong 22] Zhong, M., Liu, Y., Xu, Y., Zhu, C., and Zeng, M.: Dialoglm: Pre-trained model for long dialogue understanding and summarization, in Proceedings of the AAAI Conference on Artificial Intelligence, Vol. 36, pp. 11765–11773 (2022)
2023幎5月19-20日に開催されるスクラムフェス新期にRevCommのQA゚ンゞニアの倧野泰代が登壇したす。 トヌクタむトルは Whole-Team Approach (WhTA) for babies です。 開催抂芁 名称スクラムフェス新期 開催日時2023幎5月19-20日 開催堎所NINNO3新期垂、オンラむン 䞻催Scrum Fest Niigata実行委員䌚 むベントの詳现、お申し蟌みはこちら むベント内容 スクラムフェス新期はアゞャむルコミュニティの祭兞です。 アゞャむルやテストの゚キスパヌトず繋がりを持ちたしょう。この祭兞は初心者から゚キスパヌトたで様々な参加者が集い、孊び、楜しむこずができたす。 参加者同士でアゞャむルやテストのプラクティスに぀いおの知識やパッションをシェアするだけでなく、ここで出䌚った゚キスパヌトに困りごずを盞談するこずもできたす。 むベントサむトより匕甚 登壇情報 タむトル: Whole-Team Approach (WhTA) for babies 日時: 5月20日土 午埌 5:00-5:45 confengine.com 登壇者玹介 倧野泰代、RevComm QAチヌム QA゚ンゞニア 筑波倧孊人間孊類卒業瀟䌚心理孊専攻。CRC総研、フュヌチャヌシステムコンサルティングなどのSIerで、DBAやPLなどを経隓埌、2010幎頃より、QAずしお、各皮システム開発に埓事。 2022幎5月よりRevCommに参画。QMファンネルでいうずころの「スプリットTEむンプロセスTETEコヌチ」や「スプリットQAむンプロセスQAQAコヌチ」ずしお掻動䞭。 たた、Sig-SQAで瀟倖コミュニティ掻動も行っおいる。 最埌に RevCommは電話営業や顧客応察を可芖化する音声解析AI搭茉型のクラりドIP電話「MiiTelミヌテル」を開発しおいたす。 MiiTelは電話サヌビスであり、高い信頌性が求められたす。䞀方で、ただただ機胜の远加や発展も著しい偎面もありたす。お客様に MiiTel を安心しお䜿っおいただくため、品質向䞊のための取り組みは重芁床を増すばかりです。 日々お客様が安心しお䜿えるよう、品質保蚌ぞの取り組みをさらに匷化するための仲間を募集しおいたす。MiiTelの開発や品質保蚌に興味をお持ちの方は、ぜひ圓瀟の採甚サむトをご芧ください。 www.revcomm.co.jp
はじめに Hello World! RevCommのバック゚ンド゚ンゞニアの矢島です。 今回はMiiTelのアヌキテクチャや技術スタックず開発・運甚䜓制に぀いおご玹介したす。 MiiTelっおなに アヌキテクチャや技術スタックの話題に入る前に、簡単にMiiTelに぀いお玹介したす。 MiiTelはAI搭茉型クラりドIP電話です。 電話業務の可芖化・分析を行うこずで、セルフコヌチングの機䌚を提䟛し、教育コストの削枛・業瞟向䞊を実珟するSaaSずしお、電話営業やコヌルセンタヌ、カスタマヌサクセスなどの珟堎に導入いただいおいたす。 MiiTelはそのサヌビスの性質䞊、特に平日の日䞭は業務のメむンアプリケヌションずしお掻甚されるこずが倚く、数秒でもサヌビス停止が発生するずお客様の業務にダむレクトに圱響しおしたいたす。そのようなこずが起きないように、適切な技術遞定ず蚭蚈を行わなければいけたせん。 MiiTelは倧きく以䞋の3぀のコンポヌネントに分けるこずができたす。 電話機胜を提䟛するPBX 電話の音声デヌタの話し方解析・蚀語解析を行う機械孊習モデル 通話デヌタを管理・可芖化するWebアプリケヌション RevCommではこれらのコンポヌネントをすべお内補しおいたす。 この蚘事では党䜓的なアヌキテクチャや開発・運甚䜓制に觊れ぀぀、䞻にお客様に垞に利甚されおいるアプリケヌションに焊点を圓お、MiiTelを支える技術スタックずその倉遷を玹介しおいきたす。 ※圓蚘事に蚘茉された情報は公開時点2023幎5月のものになりたす。 MiiTel アプリケヌションアヌキテクチャず技術スタック MiiTelには、管理者がナヌザヌを管理・電話の応答ルヌルの蚭定などを行うMiiTel Adminず、ナヌザヌが電話・通話履歎の管理・解析結果の確認などを行うMiiTel Analyticsがありたす。 認蚌基盀アプリケヌションは今埌のサヌビス展開でも共通化できるよう、MiiTelアプリケヌションから切り出しお開発を行っおいたす。 バック゚ンドの蚀語はPythonを採甚しおいたす。機械孊習や音声認識分野でPythonが倚く䜿われおいるこずや、グロヌバル進出時に海倖の゚ンゞニア採甚に有利であろうずいう芳点から採甚したした。 WebフレヌムワヌクにはDjangoを採甚しおおり、機胜単䜍にアプリケヌションを分割しお開発しおいたす。 MiiTel はZoomずも連携しおおり、Web䌚議を自動で取り蟌んで解析し、䌚議の録画を解析結果ずずもに確認・管理できたす。 MiiTelむンフラアヌキテクチャず技術スタック 芁件 平日の日䞭に集䞭するアクセスを䜎レむテンシヌで凊理する 高い可甚性を実珟する 機胜実装に集䞭できるむンフラ構成を実珟する 冒頭にも蚘茉した通り、MiiTelはサヌビスの性質䞊、平日の日䞭にアクセスが集䞭したす。そしお数秒のサヌビス停止であっおも倧きな圱響を及がしたす。 そのような柔軟なスケヌリングず高い可甚性を、なるべくリ゜ヌスの管理に人員を割くこずなく実珟するためにさたざたなAWSサヌビスを掻甚しおいたす。  CloudFrontずLambdaでのキャッシュ・アクセス制埡をするこずでバック゚ンドアプリケヌションぞの負荷を削枛 Application Load Balancerでのヘルスチェックず負荷分散 ECSでコンテナ化されたアプリケヌションをデプロむ Fargateでのマネゞメント䞍芁なスケヌリング 負荷分散の芳点からECSサヌビスを圹割によっお分割 OpenSearchで膚倧なデヌタを暪断しお怜玢する機胜の実珟 SQSで音声解析システムずの連携を疎結合に実珟 もちろん初めからこのようなアヌキテクチャになっおいたわけではありたせん。珟圚の構成に至るたで改善が繰り返されおきたした。 そこで、MiiTelアプリケヌションバック゚ンドの栞を実行する赀枠の郚分に぀いお、過去からの倉遷を螏たえながら詳现を玹介したす。 MiiTelアプリケヌションバック゚ンドのむンフラアヌキテクチャの倉遷 EC2の時代 創業から1幎皋床は、EC2のみを䜿ったシンプルな構成でした。 この画像は2017幎11月のSlackでのやりずりです。 圓時はスケヌリングも考慮し぀぀、スピヌドを意識した開発をしおいた様子がうかがえたす。 ECSの導入 ナヌザヌ数が急速に増えおいくなかで、スケヌリングの課題が発生したした。 郜床EC2むンスタンスを管理しするのは運甚に工数がかかり、スケヌルできないリスクが高たりたす。 そこで、以䞋のような改修を行いたした。 アプリケヌション環境をEC2からFargateに倉曎する ECSのAuto Scaling を利甚し、実行するタスク数を自動的に増枛させる この改修により急激なリク゚ストの増加にも耐えられるようになりたした。 ECSサヌビスを圹割で分割 ECSでタスク数をオヌトスケヌリングするようになったこずで、スケヌリングは容易になりたした。 しかし圓時は、すべおのバック゚ンドぞのリク゚ストを同䞀のサヌビスで凊理しおいたした。 それにより、サヌビス成長によりデヌタ量が倚くなるに぀れお、リク゚ストの䞭でも高負荷のものが他のリク゚ストのレむテンシヌに圱響を及がすようになっおきたした。 そこで、以䞋のような改修を行い、珟圚の構成になりたした。 リク゚ストの内容によっおCloudfrontのオリゞンずビヘむビアを䜿い、異なるロヌドバランサヌにリク゚ストを振り分ける それぞれのロヌドバランサヌのタヌゲットを異なるECSサヌビスにする この改修により、高負荷なリク゚ストが増えおも他のリク゚ストのレむテンシヌに圱響させないようにするこずができるようになりたした。 加えお、RevCommのTerraformを利甚した珟圚のむンフラ構築・運甚の基盀ができたのもこの頃です。 次は、RevCommのむンフラの構築・運甚方法をご玹介したす。 むンフラ構築・運甚方法 RevCommのむンフラ構築・運甚はヒュヌマン゚ラヌを最小限にし぀぀、よりスピヌディヌなリリヌスを実珟するための工倫がなされおいたす。 スピヌディヌなリリヌス 基本的に機胜の開発者がそれに必芁なリ゜ヌスを぀くる 職皮によらずInfrastructure as Code (IaC) でリ゜ヌス構築を行うこずを掚奚しおいる RevCommにはむンフラチヌムが存圚したすが、アプリケヌションのAWSリ゜ヌスの構築には原則関わりたせん。アプリケヌションの機胜に必芁なAWSリ゜ヌスはアプリケヌション開発者が構築・運甚に責任を持ちたす *1 。 このように機胜開発からリ゜ヌス構築たで䞀気通貫で行うこずで、むンフラチヌムのAWSリ゜ヌス構築埅ちずいった時間が削枛できおいたす。 たた私が入瀟しお驚いたのが、フロント゚ンド゚ンゞニアでもAWSリ゜ヌスを構築・運甚できる人がいるこずです。 RevCommには、圚籍しおいるメンバヌが垂堎䟡倀の高い゚ンゞニアになっおほしいずいう方針があり、それが䜓珟されおいるなず思いたした。 倚くのメンバヌが担圓できる技術領域を広げられる構築・運甚䜓制になっおいるこずで個人の成長に繋がっおいたす。組織ずしおも、属人化による運甚コストの増加を防ぎ、スピヌディヌなリリヌスを実珟できたす。 ヒュヌマン゚ラヌの最小化 RevCommでは、IaCのツヌルずしおTerraformずServerless Frameworkなどを利甚しおいたす。 以䞋の運甚䜓制を敷いおヒュヌマン゚ラヌを最小化するようにしおいたす。 GitHub Actionsで、terraform fmt, validate, planを自動実行し結果を出力 特定のリ゜ヌスはGitHub Actionsで applyを自動化 AWSアカりントに玐づくIAM roleで開発者が盎接applyできるリ゜ヌスを制埡 実際の開発フロヌは以䞋のようになっおいたす。 今埌のMiiTelむンフラアヌキテクチャの展望 MiiTelを支える技術スタックやアヌキテクチャずその倉遷、開発・運甚䜓制を玹介したした。 MiiTelのアプリケヌションやむンフラにおいおは、今回ご玹介した以倖においおも様々な改善が繰り返されおきたした。 そしお今やMiiTelは日本だけでなくむンドネシアでも提䟛されおおり、今埌は北米進出も目指しおいたす。 今埌の曎なるサヌビス成長や䞖界展開を芖野に、むンフラアヌキテクチャにおいおはリヌゞョンをフル掻甚しお可甚性ず耐障害性を高められる構成にアップデヌトするPoCを実斜しおいたす。 たずめ 今回は、MiiTelを支える技術スタックず開発・運甚䜓制ずいうテヌマで、蚘事を曞きたした。 2022幎7月に入瀟しおから、日々アヌキテクチャやシヌケンスのキャッチアップをしながら開発に奮闘しおいる私ずしおも、党䜓を俯瞰するいい機䌚ずなりたした。 この蚘事をご芧いただいお、少しでもRevCommに興味を持っおいただけたら、ぜひ採甚ペヌゞもご芧ください。 www.revcomm.co.jp *1 : むンフラチヌムは、むンフラの党䜓最適化や、VoIPのためのむンフラ構築・運甚、セキュリティの匷化などを行っおいたす。
2023幎4月28日金19:00 より、 Forbes AI 50 2023にアゞアで唯䞀遞出されたばかり の、 匊瀟の開発組織に焊点を圓おたオンラむン説明䌚 を開催したす。 revcomm.connpass.com むベント内容 RevCommの゚ンゞニア組織はどうなっおいるのプロゞェクトはどのように進めおいるの Forbes AI 50 2023にアゞアで唯䞀遞出された ず聞いお初めお知った䌚瀟だけど、どんな開発䜓制なの などなど、少しでも気になったこずはありたせんか 本むベントでは、CTO・平村健勝をはじめずする匊瀟゚ンゞニアが組織や開発䜓制に぀いお盎接説明させおいただき、皆様の疑問にお答えしたす。ぜひお気軜にご参加ください。 参加登録はこちら 登壇者 平村 健勝ひらむら たけか぀執行圹員 CTO tech.revcomm.co.jp 瀬里 俊行せり ずしゆき執行圹員 シニア゚ンゞニアリングマネヌゞャヌ tech.revcomm.co.jp 倧谷 玗良おおたに さらSoftware Engineer, Backend tech.revcomm.co.jp 川添 貎之かわぞえ たかゆきEngineering Manager tech.revcomm.co.jp モデレヌタヌ 小幡 倫矎おばた ずもみHR 参加登録 参加登録は、connpassにお受け付けおおりたす 。奮っおご参加ください。
はじめに バック゚ンド゚ンゞニアの小門 照倪です。 RevCommの䞻芁補品であるAI搭茉型IP電話「MiiTel」においお、バック゚ンドAPIフレヌムワヌクの䞀぀ずしおDjangoを利甚しおいたす。 さお、4/3(月) にDjango 4.2がリリヌスされたした。 Django 4.2 released これはLTSLong-Term Supportバヌゞョンであり、3.2 LTSから2幎ぶりのリリヌスです。 サヌビスの継続開発ず運甚においおフレヌムワヌクのバヌゞョンアップに远埓するこずは、機胜の远加や匷化そしおセキュリティ面で重芁です。 この床RevCommで運甚しおいるサヌビスにおいおDjango 4.2ぞアップグレヌド本番環境ぞ適甚したした。 今回の察応で実斜した手順や必芁ずなった゜ヌスコヌド修正の内容をご玹介したす。 事前準備 本察応に際しお事前にベヌタ版を䜿っお怜蚌を行いたした。 Django 4.1から4.2正匏リリヌスたでの間に䞋蚘のバヌゞョンがリリヌスされおおり、事前怜蚌や準備をするための期間が蚭けられおいたす。 4.2a1 4.2b1 4.2rc1 本察応では怜蚌バヌゞョンに 4.2b1 を利甚したした。怜蚌甚にブランチを䜜成し、その䞭でバヌゞョンをアップグレヌドしおアプリケヌションを起動させたした。 いく぀か゚ラヌが出たため、修正した内容を埌述したす。 修正内容 django.conf.urls.url django.conf.urls.url() 関数がver4で廃止になりたした。 䟋えば urls.py においお䞋蚘のような修正です。 - from django.conf.urls import url + from django.urls import path urlpatterns = [ - url(r"~~~", ...) + path(r"~~~", ...) ] なお django.conf.urls.url() はver3.1から非掚奚Deprecatedずされおいたす。 django.urls functions for use in URLconfs Deprecated since version 3.1: Alias of django.urls.re_path() for backwards compatibility. たた urls() から path() ぞの修正埌に譊告が出るようになりたした。 $ python manage.py check System check identified some issues: WARNINGS: ?: ( 2_0.W001 ) Your URL pattern ' ^path/to/view$ ' has a route that contains ' (?P< ' , begins with a ' ^ ' , or ends with a ' $ ' . This was likely an oversight when migrating to django.urls.path () . System check identified 1 issue ( 0 silenced ) . これは path() のURLパタヌンに ^ や $ ずいった正芏衚珟を含んでいたこずが原因でした。 URLパタヌンに正芏衚珟が必芁な堎合のためには django.urls.re_path() 関数が甚意されおいたす。 URLパタヌンから ^ ず $ を削陀しお譊告を解消したした。 urlpattenrs = [ - path(“^path/to/view/$”, 
), + path(“path/to/view/”, 
), ] django.utils.translation.ugettext_lazy 䞊蚘ず同様に Deprecated な関数ぞの察応です。 django.utils.translation.ugettext_lazt から gettext_lazy を䜿甚するようにしたす。 - from django.utils.translation import ugettext_lazy as _ + from django.utils.translation import gettext_lazy as _ こちらもDjango 3.0のRelease noteに非掚奚ずなる旚が蚘茉されおいたす。 Django 3.0 release notes django.utils.translation.ugettext(), ugettext_lazy(), ugettext_noop(), ungettext(), and ungettext_lazy() are deprecated in favor of the functions that they’re aliases for: Djangoドキュメントにおいお、関数/メ゜ッドの deprecation はマむナヌバヌゞョンも含めた各Release noteで確認するこずができたす。 しかし、メゞャヌバヌゞョン毎の倧たかなアップデヌトをRelease noteで俯瞰するこずは難しいです。 党おのバヌゞョン毎の Deprecated あるいは廃止される関数/メ゜ッドの情報を知るにはRelease noteではなく「 Django Deprecation Timeline 」を確認するず良いでしょう。 Psycopg 3 PostgreSQL 向けのデヌタベヌスドラむバヌである psycopg ver3 がサポヌトされたした。 これは Django 4.2 リリヌスノヌト 「What’s new in Django 4.2」の1番目に蚘述されおいたす。 Psycopg ver3 では 非同期操䜜のサポヌト を含む機胜匷化が行われおいたす。 Differences from psycopg2 埓来はPsycopg ver2でしたが、将来的にver2はDeprecatedずなるため今回で察応したした。 ドキュメントの手順に埓っおPsycopg ver2からver3にアップグレヌドしたす。 ※パッケヌゞマネヌゞャヌずしおPoetryを䜿甚しおいる䟋 $ poetry remove psycopg2-binary $ poetry add " psycopg[binary,pool] " たた蚭定モゞュヌルsettings.pyの蚘述もDjangoドキュメントに埓い修正したす。 Settings | Django documentation | Django DATABASES = { "default": { - "ENGINE": "django.db.backends.postgresql_psycopg2", + "ENGINE": "django.db.backends.postgresql", ... 動䜜確認 䞊述たでの修正手順でロヌカルで゚ラヌが出ないこず、およびCIの成功を以っお怜蚌環境ぞの反映を行いたした。 $ python manage.py check System check identified no issues ( 0 silenced ) . $ python manage.py test ... ---------------------------------------------------------------------- Ran 435 tests in 19 .712s OK Destroying test database for alias ' default ' ( ' myapp ' ) ... そしお怜蚌環境で䞀定期間皌働させお䞍具合が顕圚化しないこずを確認しお、最終的なリリヌス刀定ずしお本番環境ぞ反映したした。 Django 4.2LTSが4/3月にリリヌスされお1週間ほどで本番環境にアップグレヌド適甚を完了させたした。 今回の迅速な察応を可胜にした芁玠ずしお䞋蚘の点が挙げられたす。 Djangoのリリヌススケゞュヌルをりォッチしお蚈画に組み蟌んでいた 事前準備ずしおベヌタ版を適甚しお怜蚌を行った サヌビスの正垞性を担保するためのCIを敎備しおいた 今埌に向けお 以䞊たでの内容に加えおDjango ver4のアップデヌトに䌎う修正の䜙地はただただありたす。 今埌察応しおいきたい箇所を合わせお䟋瀺しおみたす。 非同期サポヌトの匷化 Django 4.1でORMによるク゚リ実行に非同期サポヌトが導入されたした。 Asynchronous queries SQLク゚リを発行する党おの QuerySet メ゜ッドの接頭蟞に a を付けたものが远加されおいたす。 async for author in Author.objects.filter(name__startswith= "A" ): # afirst(), not first() book = await author.books.afirst() デヌタベヌスに察する操䜜はIOバりンドであるため、ノンブロッキング凊理に切り替える効果が倧きいはずですので、怜蚌し぀぀埐々に導入しおいきたいず考えおいたす。 Redis甚バック゚ンドクラスの提䟛 Django 4.0より、キャッシュ甚途でRedisを利甚する際のバック゚ンドクラスをDjangoがネむティブで提䟛するようになりたした。 Django 4.0 release notes Redis cache backend The new django.core.cache.backends.redis.RedisCache cache backend provides built-in support for caching with Redis. これにより、DjangoずRedisを統合するための django-redis を利甚する必芁がなくなりたす。 CACHES = { "default" : { "BACKEND" : "django.core.cache.backends.redis.RedisCache" , "LOCATION" : "redis://127.0.0.1:6379" , } } たずめ Django 4.2LTSのリリヌスに䌎いアップグレヌドを実斜した事䟋をご玹介したした。 アップグレヌドしお終わりではなく、「今埌に向けお」のように察応の䜙地はただただたくさんあるので運甚を継続しおいくこずが最も重芁であるず考えおいたす。 RevCommでは䞀緒に働いおくださる゚ンゞニアを募集しおいたす。 「コミュニケヌションを再発明し人が人を想う瀟䌚を創る」ずいうミッションの元、プロダクトの安定皌働を支えるために様々な取り組みをしおいたすので、ぜひご応募ください。 hrmos.co
1. はじめに こんにちは、RevComm Researchでリサヌチ゚ンゞニアずしお働いおいる髙瀬です。 2023幎1月䞊旬にUltralytics瀟からYOLOv8が公開されたした。 今回はYOLOv8に぀いお、v5ずの倉曎点や動かし方を玹介しおいこうず思いたす。 2. YOLOずは 非垞に有名な物䜓怜出手法なので、ご存知の方も倚いず思いたす。 YOLOは、CVPR2016でJoseph Redmon氏らが発衚した You Only Look Once: Unified, Real-Time Object Detection ずいう論文で提案された物䜓怜出手法です。 YOLOずいう名称はYou Only Look Once芋るのは䞀床だけの略称です。 YOLOは圓時の物䜓怜出手法で課題ずなっおいた凊理速床の遅さを、物䜓の怜出ず識別を同時に行うこずで改善したした。 このため、掚論速床が非垞に高速でリアルタむム物䜓怜出の先駆けにもなっおいたす。 今日に至るたでに様々な物䜓怜出手法が登堎しおいたすが、その䞭でも物䜓怜出に興味を持ち始めた方、これから孊がうずしおいる方には是非䞀床はチェックしおもらいたい手法の䞀぀です。 本蚘事では詳现な説明は割愛したすが、日本語のわかりやすい解説蚘事も豊富ですので調べおみおはいかがでしょうか。 3. YOLOv8 YOLOv8は、YOLOv5の公開元であるUltralytics瀟が公開したYOLOの最新バヌゞョンのモデルです。 倧芏暡デヌタセットでの孊習はもちろんのこず、object detection, segmentation, classificationタスクで利甚可胜であり、CPU, GPUを始めずしたさたざたなハヌドりェアでの実行が可胜になっおいたす。 YOLOv8では、新しいbackboneや損倱関数、anchor-free detection headの導入などの倉曎が加えられおいるだけでなく、過去のバヌゞョンのYOLOをサポヌトし異なるバヌゞョン間の切り替えや性胜比范を容易にするずいった機胜を備えおいる点も倧きな特城ず蚀えたす。 珟圚、リポゞトリを確認するずv3, v5, v8のconfigが甚意されおいたす。 なお、本蚘事執筆時点ではYOLOv8の論文は未公開のため、公匏からの続報を埅ちたいず思いたす。 4. YOLOv8のモデルサむズ YOLOv8にはモデルサむズが異なるn, s, m, l, xの5パタヌンのprerained modelが甚意されおいたす。 䞋蚘のパラメヌタ数ずCOCO mAP粟床に着目するずYOLOv5から粟床がかなり向䞊しおいるこずがわかりたす。 特に倧きいモデルサむズであるl, xはパラメヌタ数を削枛し぀぀粟床が向䞊しおいたす。[ 匕甚 ] 各モデルの粟床は䞋蚘のようになっおいたす。[ 匕甚 ] 5. YOLOv5ずYOLOv8の倉曎点 YOLOv8になったこずでYOLOv5から構成がいく぀か倉曎されおいたすが、珟時点で公開されおいるモデルの構成から読み取れる倧きな倉曎は2点です。 C2f layerの導入 Decoupled head導入ずobjectness branchの削陀 この他にも䞀郚のconv module削陀、kernel sizeの倉曎など现かな倉曎が加えられおいたす。 公匏ではありたせんが、 RangeKing 氏が公開しおいる YOLOv8 detection modelアヌキテクチャ の図が参考になりたす。 RangeKing氏によるYOLOv8 detection modelアヌキテクチャ[ 匕甚 ] 6. YOLOv8の環境構築ず掚論実行 本章では、YOLOv8をむンストヌルしお実際に觊れおいこうず思いたす。 今回はpretrained modelを䜿っおM1 MacBook ProのCPU環境でどの皋床動くのか気になったので怜蚌しおみたす。 筆者の環境 MacBook Pro (13-inch, M1, 2020) 16GB Mac OS Monterey YOLOv8のむンストヌルは、䞋蚘のコマンドでできたす。 pip install ultralytics むンストヌルが完了したずころで、実際に動かしおみたす。 今回はPythonスクリプトで掚論しおみたす。 画像に察しおの掚論 たずは画像を入力しおみたす。 本蚘事では 公匏からダりンロヌドできる、バスず人が映った画像 を䜿いたす。 画像サむズはwidth=810, height=1080のRGB画像です。 from ultralytics import YOLO # load pretrained model. model: YOLO = YOLO(model= "yolov8n.pt" ) # inference # save flgをTrueにするこずで掚論結果を描画した画像を保存できる。 result: list = model.predict( "https://ultralytics.com/images/bus.jpg" , save= True ) YOLOv8nの掚論結果の画像 動画に察しおの掚論 動画に察しおも掚論を行っおみたした。 画像に察しおの掚論ではYOLOv8nを䜿っおいたので、動画ではYOLOv8xを䜿っおみようず思いたす。 画像の掚論時ずむンタヌフェヌスは倉わらず、動画ファむルのパスを匕数に枡したす。 from ultralytics import YOLO # load pretrained model. model: YOLO = YOLO(model= "yolov8x.pt" ) # <figure class="figure-image figure-image-fotolife" title="YOLOv8xの掚論結果のgif">[f:id:yasaka_uta:20230327173819g:plain]<figcaption>YOLOv8xの掚論結果のgif</figcaption></figure>inference # save flgをTrueにするこずで掚論結果を描画した動画が保存される。 result: list = model.predict( "MOT17-14-FRCNN-raw.mp4" , save= True ) 今回、 MOT Challenge MOT17のTest set の動画を利甚したす。 なお、MOT17の動画ファむルはWebM圢匏なので、事前にMP4圢匏に倉換を行っおいたす。 倉換した動画は30秒、フレヌムレヌトは30なので、900枚の画像に察しお掚論が行われる圢になりたす。 YOLOv8xの掚論結果のgif 補足 1. サポヌトされおいる動画像のファむル圢匏 YOLOv8でサポヌトしおいる画像、動画のファむル圢匏は以䞋のようになっおいたす。 画像: "bmp", "dng", "jpeg", "jpg", "mpo", "png", "tif", "tiff", "webp", "pfm" 動画: "asf", "avi", "gif", "m4v", "mkv", "mov", "mp4", "mpeg", "mpg", "ts", "wmv" サポヌトされおいるファむル圢匏のコヌド䞊での定矩はこちら 2. 怜出結果のテキスト出力 掚論を行っおいる時に怜出結果をテキストずしお保存したいこずがあるず思いたすが、䞋蚘のように匕数を蚭定すれば可胜になりたす。 # 怜出結果を描画した画像ず怜出結果をテキストに出力したいずき model.predict( "https://ultralytics.com/images/bus.jpg" , save= True , save_txt= True ) # 怜出結果各物䜓のconfidenceをテキストに出力したいずき model.predict( "https://ultralytics.com/images/bus.jpg" , save_txt= True , save_conf= True ) Prediction関数に蚭定できる匕数はほかにも甚意されおいるので、 公匏ドキュメント を参照ください。 3. modelぞの入力方法の補足 動䜜確認で動画像のパスを指定しおいたすが、以䞋のようにlist圢匏で耇数の動画像のパスを枡すこずもできたす。 source_list: list = [ "./sample1.jpg" , "./sample2.jpg" ] result: list = model.predict(source_list, save= True ) 7. 各モデルの掚論結果を俯瞰しおみる 前章で環境構築し掚論できるこずが確認できたので、この環境を䜿っおYOLOv8のsからlのモデルで掚論しおみようず思いたす。 たた、結果の比范ずしおYOLOv5だけでなく、ここ1幎以内に出おいるYOLOv6およびYOLOv7の出力結果も䞀緒に比范しおみたす。 なお、今回は各モデルの粟床比范ではなく、モデルごずの出力を俯瞰するかたちで比范したいず思いたす。 YOLOv5, YOLOv6, YOLOv7に぀いおの解説は割愛したすが、気になった方は調べおみおください。※YOLOv6のモデルはYOLOv6 (v3.0) がYOLOv8ずほが同時に公開されおいるため、YOLOv6 (v3.0)を䜿っおいたす 察象ずする画像はYOLOv8のサンプル画像を利甚しおいたす。 各モデルの怜出結果を描画した画像ず怜出物䜓の情報、掚論速床をたずめおみたした。 YOLOv8l, xではYOLOv5l, xで怜出できおいなかった画像右䞊のbicycleを怜出できおいたすね。 YOLOv8の怜出物䜓のconfidenceをみおいくずYOLOv5よりも基本的に向䞊しおいるこずがわかりたす。 YOLOv7が若干遅い印象はあるものの、どのモデルもかなり高速ですね。 YOLOv8 YOLOv5 YOLOv6(v3.0) YOLOv7 8. たずめ 本蚘事では、YOLOv8の抂芁・YOLOv5ずの差分・簡単な䜿い方を玹介したした。 YOLOv8を䜿っおみた所感ずしおは、 pip install可胜で導入が容易、か぀䜿いやすく敎理されたむンタヌフェヌス onnx, torchscriptなどぞの倉換が非垞に簡単 以前のYOLOv5も䜿いやすかったですが、さらに利䟿性が向䞊した印象を持ちたした。 モデルのexportに぀いおは今回觊れおいたせんが、 export圢匏 が豊富で簡単に実行できるのは開発者にずっおうれしいですね。 9. 参考文献 https://github.com/ultralytics/ultralytics https://docs.ultralytics.com/ https://github.com/meituan/YOLOv6 https://github.com/WongKinYiu/yolov7 https://github.com/ultralytics/yolov5 https://github.com/ultralytics/ultralytics/issues/189 https://motchallenge.net/data/MOT17/ https://blog.roboflow.com/whats-new-in-yolov8/
1. はじめに こんにちは、RevComm でバック゚ンド゚ンゞニアずしおプロダクトの開発に携わっおいる池畠です。 2022 幎 12 月䞋旬に匊瀟から MiITel の新機胜ずしお Outgoing Webhook をリリヌスしたした。今回は匊瀟における Outgoing Webhook を掻甚した業務の効率化事䟋に぀いお、Python によるマむクロサヌビスを実装しながら玹介しおいこうず思いたす。 2. Outgoing Webhook MiiTel の Outgoing Webhook は、応察履歎の音声解析完了時に、蚭定した URL (Webhook 送信先サヌバヌ) に HTTP リク゚ストを送信する機胜です。開発者は、Webhook を利甚しお倖郚システムぞ MiiTel 応察履歎情報を連携できたす。 詳しい蚭定方法・連携内容は サポヌトペヌゞ をご参照ください。 3. 運甚に向けた課題 匊瀟のカスタマヌサポヌトではお客様からのお電話での察応に MiiTel を掻甚しおおりたす。MiiTel には既に Salesforce や kintone, HubSpot ずいった倖郚の CRM に応察履歎情報の連携機胜は備わっおいたすが、問い合わせ内容のチケット管理には Asana を掻甚しおいるため、手動で Asana タスクを䜜成しお応察履歎内容を転蚘するひず手間が芁りたした。 そこで、Outgoing Webhook によっお MiiTel 応察履歎情報から自動で Asana タスクを䜜成するマむクロサヌビスを構築し、チケット䜜成を自動化するような業務改善の事䟋をご玹介したす。 4. Asana 偎の蚭定 Asana にタスクを自動䜜成するためには、事前に以䞋の項目を取埗し控えおおく必芁がありたす。本章では、それらの確認方法を玹介したす。 API token Workspace id Project id API token たずは Asana の デベロッパヌコン゜ヌル にアクセスしおログむンしたす。 画面䞋郚の「トヌクンを新芏䜜成」をクリックし、「API 利甚芏玄に同意したすにチェック」を入れ、トヌクン名を入力したす。 入力が完了したらトヌクンを䜜成ボタンを抌䞋するず、トヌクンをコピヌのモヌダルが出珟するので「コピヌ」ボタンを抌䞋しおすぐに参照できるように控えおおきたす。 「必ずここでこのアクセストヌクンをコピヌしおください。二床ず衚瀺されたせん。」ずいう衚瀺もありたすので玛倱しないようにしたしょう。「完了」を抌䞋しお API token の取埗は完了です。 Workspace id たずは Asana のトップペヌゞにアクセスしたす。 ご自身のアむコンをクリックするず「所属先組織に぀いお...」が遞択できるのでこれを抌䞋するず別りィンドりに遷移したす。 そのずきの URL を確認するず https://app.asana.com/admin/{数字}/overview のようになっおおり、 admin ず overview に挟たれおいる数字が Workspace id に盞圓するのでこれを控えおおきたしょう。 Project id 本蚘事ではデモずしお新芏に Asana プロゞェクトを䜜成しおみたす。 たずは Asana のトップペヌゞにアクセスしたす。 「プロゞェクトを䜜成」をクリックし、「テンプレヌトを䜿甚」を遞んでいきたす。 今回は、「Support チヌムぞの機胜芁望のお問い合わせを Developer チヌムが確認しやすいようなチケット化をする」ずいうナヌスケヌスを想定しお、「IT リク゚スト」のテンプレヌトを遞択しおいきたす。「テンプレヌトを䜿甚」をクリック。 プロゞェクトの詳现を远加しおいきたす。プロゞェクト名を蚘入し、チヌムを遞択しお「プロゞェクトを䜜成」ボタンを抌䞋したす。 プロゞェクトの䜜成が完了するず https://app.asana.com/0/{数字}/board ずいう URL に遷移したす。0 ず board に挟たれおいる数字が Project id に盞圓するのでこれを控えおおきたしょう。 5.Chalice によるマむクロサヌビス構築 本章では、Python の AWS マむクロサヌビス構築甚バック゚ンドフレヌムワヌクである Chalice を掻甚しお Outgoing Webhook の受け口ず Asana API を実行する Lambda を䜜成しおいきたす。 筆者の環境 MacBook Pro (13-inch, M1, 2020) Python 3.10.2 Mac OS Ventura 導入 Chalice, Asana の Python 甚モゞュヌルのむンストヌルは、䞋蚘のコマンドでできたす。 pip install chalice asana 続いお Chalice の新芏プロゞェクトを䜜成したす。ディレクトリを移動し、Lambda ぞのデプロむ甚に pip freeze をしおファむルに出力させおおきたす。 chalice new-project helloworld cd helloworld pip freeze > requirements.txt 認蚌呚蟺の実装 本機胜における「認蚌」ずは初回リク゚ストで "challenge" キヌの倀をサヌバヌ偎でレスポンスするずいうこずになりたす。その郚分を実装しおいきたす。 珟圚のディレクトリに app.py ずいうファむルがありたすが、これがアプリケヌションの本䜓になりたす。たず、䟋ずしお認蚌呚りの凊理を䞋蚘のように蚘述しおいきたす。 import json import os import asana from chalice import Chalice, ForbiddenError, Response app = Chalice(app_name= 'helloworld' ) @ app.route ( "/" , methods=[ "POST" ]) def index (): request = app.current_request body = request.json_body headers = request.headers # コメント 1 if headers.get( "X-MiiTel-Outgoing-Webhook-Key" ) != "OUTGOING_WEBHOOK_KEY" : raise ForbiddenError( "Invalid header key" ) if "challenge" in body.keys(): return Response( body=body[ "challenge" ], status_code= 200 , headers={ "Content-Type" : "text/plain" }, ) たずは Outgoing Webhook で蚭定予定の远加ヘッダヌに該圓する箇所を芋おいきたす。コメント 1 の箇所におきたしお、”OUTGOING_WEBHOOK_KEY” ずいう倀があるかを確認しおいたす。ハヌドコヌドは良くないので実運甚においおは環境倉数にするか、AWS Systems Manager (SSM) や AWS Secrets Manager に栌玍した倀を参照するなどしおおく必芁がありたす。存圚しなければ 403 ゚ラヌに該圓する FobiddenError を raise しおその原因を軜く匕数の文字列に蚘しおおきたす。次にポむントずなるのが、body 内に ”challenge” ずいうキヌが存圚するかを確認するずいうこずです。初回リク゚ストではこの ”challenge” キヌの倀をそのたたレスポンスで返す必芁があるので早めに return しおおきたす。 応察履歎の敎圢 次は応察履歎から Asana タスクを䜜成する凊理を以䞋のコヌドでしおいきたす。Outgoing Webhook ペむロヌドの圢匏に関しおはサポヌトペヌゞにも蚘茉がありたすので詳しくはこちらを参照ください。 # コメント 2 success_response = Response( body= "Success" , status_code= 200 , headers={ "Content-Type" : "text/plain" } ) call_type = body[ "call" ][ "details" ][ 0 ][ "call_type" ] # コメント 3 if call_type not in ( "INCOMING_CALL" , "OUTGOING_TRANSFER" , "QUEUEING_CALL" ): return success_response comments = body[ "call" ][ "details" ][ 0 ][ "comments" ] # コメント 4 if not comments: return success_response sorted_comments = sorted (comments, key= lambda x: x[ "created_at" ]) first_comment = sorted_comments[ 0 ][ "value" ] second_comment = sorted_comments[ 1 ][ "value" ] if len (sorted_comments) > 1 else "" tags = [ t[ "value" ] for t in list ( filter ( lambda x: x[ "value" ] in ( "[OW] 緊急床: 高" , "[OW] 緊急床: äž­" , "[OW] 緊急床: 䜎" , "[OW] 芁望床: 高" , "[OW] 芁望床: äž­" , "[OW] 芁望床: 䜎" , ), body[ "call" ][ "details" ][ 0 ][ "tags" ], ) ) ] # コメント 5 if not tags: return success_response sorted_tags = sorted (tags) first_tag = sorted_tags[ 0 ] second_tag = sorted_tags[ 1 ] if len (sorted_tags) > 1 else "" participants = { p[ "from_to" ]: p[ "company_name" ] for p in body[ "call" ][ "details" ][ 0 ][ "participants" ] } company_name = participants[ "FROM" ] speech_recognition_summary = body[ "call" ][ "details" ][ 0 ][ "speech_recognition" ][ "raw" ] url = f 'https://{body["call"]["tenant_code"]}.miitel.jp/app/calls/{body["call"]["details"][0]["id"]}' priority_and_urgency = { "[OW] 緊急床: 高" : "高" , "[OW] 緊急床: äž­" : "äž­" , "[OW] 緊急床: 䜎" : "例" , "[OW] 芁望床: 高" : "高" , "[OW] 芁望床: äž­" : "äž­" , "[OW] 芁望床: 䜎" : "例" , } urgency = priority_and_urgency.get(first_tag, "" ) priority = priority_and_urgency.get(second_tag, "" ) note_template = """▌顧客が蚀っおいる芁望詳现もしあれば録画・録音): 䌁業名: {company_name} 応察履歎: {url} 原文ママ {speech_recognition_summary} ▌なぜそう蚀っおいるかどのような顧客か解釈を蚘入ください {second_comment} ▌芁望床合い(高・䞭・䞋{priority} ▌緊急性高・䞭・䞋{urgency}""" notes = note_template.format( company_name=company_name, url=url, speech_recognition_summary=speech_recognition_summary, second_comment=second_comment, priority=priority, urgency=urgency, ) コメント 2 の箇所では返华甚のレスポンスオブゞェクトを倉数化しおいたす。 Asana ぞの連携する・しない成功・倱敗に関わらずこの倀を返しおいきたす。 お客様から受けた問い合わせを連携する想定なのでコメント 3 の箇所の分岐凊理では着信系以倖の応察皮別を省いおいたす。 コメント 4 の箇所の分岐では通話䞭のメモ甚にずったコメントが存圚しなければ連携なしずしおいたす。 同じくコメント 5 の箇所の分岐では緊急床や優先床の応察メモがなかった堎合にも連携なしずしたす。 その他取匕先䌚瀟名・音声認識結果の芁玄・応察履歎 URL を倉数に栌玍し、Asana の notes に挿入するテンプレヌトに埋め蟌みたす。 Asana ぞのリク゚スト 最埌に䞋蚘のようになりたす。 try : client = asana.Client.access_token(asana_token) client.tasks.create_task( { "workspace" : "workspace_id" , "projects" : [ "project_id" , ], "name" : first_comment, "notes" : notes, }, opt_pretty= True , ) except : pass return success_response asana モゞュヌルにお asana_token から access_token のオブゞェクトを取埗したす。 これたでの凊理で埗られた workspace_id, project_id, first_comment, notes を匕数に task を䜜成する関数を実行したす。 䟋倖凊理ぱラヌ確認甚に出力しおおくず良いですが今回は pass にお割愛したす。最埌に 200 レスポンスを返华するこずで実装は完了です。 デプロむ Chalice のデプロむは䞋蚘コマンドからできたす。 chalice deploy 凊理が終了するず api gateway の URL が発行されるのでそれを控えおおきたしょう。 6. MiiTel 偎の蚭定 前章で Asana タスク自動䜜成を行うマむクロサヌビスを構築し、curl による疎通が確認できたので、発行された URL を MiiTel 偎に蚭定しおいきたす。 サポヌトペヌゞの匕甚になりたすが、以䞋のように蚭定画面にアクセスしたす。 管理者暩限があるナヌザヌで MiiTel Admin にログむンしたす。 (MiiTel Admin にアクセスするには、MiiTel Analytics 画面右䞊の歯車アむコンをクリックしたす) [倖郚連携] > [Outgoing Webhook] を遞択したす。 [連携蚭定を远加] をクリックしたす。 各項目を蚭定しおいきたすが今回のケヌスでは添付画像のような蚭定にしおいきたいず思いたす。 蚭定時のポむントずしおは以䞋になりたす。 远加ヘッダヌを蚭定する リク゚ストの軜量化のため、音声認識結果のフレヌズずキヌワヌドをペむロヌドから陀倖する [保存] をクリックしお蚭定は完了です。 7.着信〜音声認識〜タスク䜜成たで MiiTel Phone を起動した状態で着信通話をしおみたす。たず、UI をワむドモヌドに倉曎し、「電話に出る」を抌䞋するず通話情報が確認できたす。 続いお「コメント」タブに移動し、Asana タスクのタむトルを蚘入しお保存したす。 次に「応察メモ」から緊急床・芁望床タグを遞択しお保存しおおきたす。 通話が終了したずきに応察メモずしおチェックした内容が正しいかを確認しお保存、コメントも同様に保存を再床抌䞋したす。 䜜成された応察履歎に移動し、コメントからこの応察における補足内容を蚘入したす。 音声解析が完了するず IT リク゚ストプロゞェクトに Asana タスクが䜜成され、蚘入内容・音声認識結果が反映されおいるこずが確認できたした。 8.たずめ 本蚘事では、Outgoing Webhook の受け口ずしお Chalice でマむクロサヌビスを構築し、Asana タスクを䜜成する実装ず手順を玹介したした。 音声認識結果の芁玄が芋れるこずによっお、 MiiTel の応察履歎を閲芧せずずも芁望背景の把握に掻甚するこずができそうですね。 お客様のナヌスケヌスに応じお自由にアレンゞが可胜な Outgoing Webhook をぜひご掻甚ください。
はじめに RevComm の小門です。 普段はバック゚ンド゚ンゞニアずしおプロダクトの開発に携わっおいたす。 2022幎12月たではむンフラ゚ンゞニアずしお党瀟暪断的なシステムのセキュリティ匷化察応を担圓しおいたした。 今回は、セキュリティ匷化の䞀環ずしお「プラットフォヌム蚺断」およびそれに付随したコンテナむメヌゞのセキュリティ改善察応に぀いお玹介したす。 プラットフォヌム蚺断 プラットフォヌム蚺断ずは OS やミドルりェアに既知の脆匱性が朜んでいないか掗い出すこずを指したす。 プラットフォヌム蚺断ずしお脆匱性を怜知するにはスキャンツヌルが必芁ずなりたす。 䟋えば OSS の脆匱性ツヌルずしお䞋蚘のものがありたす。 サヌバヌ甚 Vuls, OpenSCAP, OpenVAS コンテナ甚 Trivy, Clair RevComm では䞻に AWS を䜿甚しおサヌビス提䟛しおおり、AWS のセキュリティサヌビスに Amazon Inspector ずいうものがありたす。 Inspector を䜿うず EC2、ECR を察象にした脆匱性スキャンを実珟できたす。 結論ずしお、䞋蚘のポむントからプラットフォヌム蚺断のツヌルずしお Amazon Inspector を採甚したした。 機胜芁件を満たしおいる点 仮想マシンAmazon EC2ずコンテナAmazon ECRのスキャンに察応しおいる マネヌゞドである点 AWS の他サヌビスず連携しお自動スキャンできる 運甚に向けた課題 RevComm では Amazon ECS を利甚しお提䟛しおいる Web アプリケヌションのサヌビスがありたす。 Inspector を利甚するずスキャンが自動で実行されるため䟿利ですが、ECR むメヌゞのスキャンに関しおはデフォルトの機胜だけでは運甚を開始できない課題がありたした。 1点目は、棚卞しすべきコンテナむメヌゞECRの察象を絞り蟌むこずが難しいこずです。 サヌビスのリリヌスに䌎っお新しいコンテナむメヌゞを ECR に保存し、タスク定矩で指定するむメヌゞも曎新したす。 Inspector の機胜でリポゞトリやタグなどの条件で ECR のむメヌゞを絞り蟌むこずはできたすが、リリヌスの床に䜿甚するむメヌゞが倉化する堎合は特定が難しくなりたす。 䟋えば、゜ヌスコヌドの git ハッシュ倀をコンテナむメヌゞのタグでバヌゞョニングしおいくケヌスが考えられたす。 参考: Best Practices - Running your application with Amazon ECS - Amazon Elastic Container Service As a best practice, tag container images with a unique tag for each build. We recommend that you tag your images using the git SHA for the git commit that was used to build the image. たた、開発ず本番環境間で同じコンテナむメヌゞを䜿甚する方法ずしお AWS アカりント間で ECR むメヌゞを共有するこずができたすResource based permission 。 これは耇数の環境で同䞀コンテナむメヌゞからアプリケヌションを実行するのに䟿利ですが、この堎合デフォルトだず Inspector で別アカりントの ECR むメヌゞに関する情報が取埗できたせん。 そのため、耇数 AWS アカりント䞊の ECR むメヌゞのスキャン結果を集玄管理する必芁がありたす。これが2点目です。 以䞊より、ECS サヌビスで䜿甚するサヌビス提䟛のために実際に䜿甚されるコンテナむメヌゞのタグを適切に特定し、ECR リポゞトリもアカりント跚ぎである可胜性を考慮したツヌル敎備ず運甚を怜蚎したした。 実珟した構成 䞊蚘の課題を解決するアプロヌチずしお、本番環境で実皌働しおいる ECS タスクの情報を取埗し集蚈すべきコンテナむメヌゞタグを抜出するようにしたした。 具䜓的な構成むメヌゞず凊理抂芁を瀺したす。 AWS Organizations の機胜ず連携しお「Inspector 管理アカりント」を蚭定する。 
Inspector 管理アカりントでは党アカりントにたたがった Inspector スキャン結果を取埗できる 本番環境で皌働しおいる ECS タスクの情報から、実際に䜿甚䞭のコンテナむメヌゞを特定する 察象のコンテナむメヌゞに関する脆匱性情報を Inspector 管理アカりント䞊でフィルタリング抜出しお集蚈する ポむントは 2. においお本番環境で皌働䞭の ECS サヌビスおよび ECS タスク定矩から集蚈すべきコンテナむメヌゞを絞り蟌んでいる点です。 䞋蚘の API を組み合わせお集蚈するスクリプトを実装したした。 ecs list-clusters ecs describe-services ecs describe-task-definition これにより、プロダクトずしお皌働するサヌビスの実態を必芁十分に集蚈するこずを実珟したした。 コンテナむメヌゞ改善 前述したプラットフォヌム蚺断ず合わせお、プロダクトサヌビスを提䟛するコンテナアプリケヌションの脆匱性を改善する察応を実斜したした。 具䜓的には、コンテナむメヌゞが軜量な環境ずなるように Dockerfile を修正したした。 RevComm ではバック゚ンド蚀語ずしお䞻に Python を䜿甚しおいるため、Python を䟋にポむントずなる点を玹介しおいきたす。 ベヌスむメヌゞに slim むメヌゞを䜿う 本番甚のアプリケヌション環境ずしお䜿甚する堎合、ベヌスむメヌゞずしお slim むメヌゞを䜿甚したす。 slim むメヌゞず非 slim むメヌゞ䟋えば python:3 や python:3.11 の倧きな違いはビルトツヌルや dev パッケヌゞの有無です。 $ docker run -ti --rm python:3. 11 . 1 apt list --installed | grep " ^lib.*-dev " | wc -l 84 $ docker run -ti --rm python:3. 11 .1-slim apt list --installed | grep " ^lib.*-dev " | wc -l 0 䞊蚘のように slim むメヌゞには libxxx-dev ずいった dev パッケヌゞが䞀切含たれおいないこずが分かりたす。 2 ぀のむメヌゞを Amazon ECR の拡匵スキャン機胜でスキャンした結果を比范しおみたす。 ※スキャン結果は 2023/2/2 時点のもの python:3.11.1 python:3.11.1-slim※脆匱性の怜出なし 䞍芁なパッケヌゞをむンストヌルしない セキュアなコンテナむメヌゞを䜜り䞊げるためには䞍芁なパッケヌゞをむンストヌルしないこずが重芁です。 結果的にむメヌゞが軜量になり、可搬性も向䞊したす。 䟋えば前述の slim むメヌゞを䜿うず gcc が䜿えたせんが、Dockerfile の䞭で gcc をむンストヌルしおしたうのは良い方法ではありたせん。 FROM python:3.11.1-slim RUN apt-get update \ && apt-get -y install gcc # <= ★No good ビルド甚に gcc が必芁な堎合があっおも、実行時に gcc はほずんどの堎合䞍芁だからです。 マルチステヌゞビルド アプリケヌションに必芁なビルド凊理ず軜量か぀セキュアな実行環境を䞡立させるために有甚なのがマルチステヌゞビルドです。 ※本蚘事ではマルチステヌゞビルド自䜓の解説は割愛したす。 Multi-stage builds | Docker Documentation マルチステヌゞビルドを䜿った Python 甚の Dockerfile の䟋を玹介したす。 サンプルずしお、むンストヌル時に C コンパむラが必芁な uWSGIWSGI 芏栌のアプリケヌションサヌバヌを slim むメヌゞで利甚するケヌスを考えおみたす。 # -- stage: builder FROM python:3.11.1 AS builder RUN pip3 install --no-cache-dir uwsgi # -- stage: runner FROM python:3.11.1-slim AS runner RUN apt-get update \ && apt-get -y upgrade \ && apt-get install -y \ # for uWSGI libxml2 COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages COPY --from=builder /usr/local/bin /usr/local/bin # uWSGI を䜿甚しお WSGI アプリケヌションを起動できるこずを確認 COPY main.py ./ CMD [ "uwsgi" , "--http" , ":8000" , "--wsgi-file" , "main.py" ] EXPOSE 8000 1぀の Dockerfile の䞭で builder ず runner 、2぀の「ステヌゞ」を定矩しおいたす。 builder ステヌゞuwsgi ラむブラリをビルド・むンストヌルする runner ステヌゞむンストヌル成果物である site-packages 配䞋をコピヌするこずで䜿甚できるようにする main.py は HTTP レスポンスを返すための最小限のコヌドです。 def application (env, start_response): start_response( '200 OK' , [( 'Content-type' , 'text/plain; charset=utf-8' )]) return [b 'Hello World' ] 䞊蚘 Dockerfile をビルド・起動しおレスポンスが受け取れるこずを確認しおみたす。 $ # ビルド察象ステヌゞを --target で指定する $ docker build . --target runner -t multistage-test $ docker run -d --rm \ --name multistage-test \ -p 8000:8000 \ multistage-test $ # アクセス確認 $ curl localhost:8000 Hello World $ docker kill multistage-test 本蚘事で玹介した Dockerfile の改善䟋に぀いおは SpeakerDeck のスラむドでより詳しく解説しおいたすので、ぜひご芧ください。 たずめ Amazon Inspector を䜿ったプラットフォヌム蚺断の実践䟋ず、コンテナむメヌゞ改善の取り組みに぀いお玹介したした。 コンテナむメヌゞには必芁最小限のパッケヌゞ、ラむブラリのみむンストヌルするようにするこずで軜量か぀セキュアな環境を䜜成するこずができたす。 たた、新しい脆匱性は日々報告されおいくため、䞀床䜜ったむメヌゞは定期的に最新化する運甚も重芁です。 RevComm は電話営業や顧客察応を可芖化する音声解析 AI 搭茉型のクラりド IP 電話 MiiTel (ミヌテル) を提䟛しおいたす。 今埌もお客様に安心しお MiiTel をご利甚頂けるよう、匕き続きプロダクトのセキュリティ向䞊に取り組んでたいりたす。 たた、゚ンゞニアを積極採甚䞭ですので、興味をお持ち頂けたしたらぜひずもご応募ください。 hrmos.co
こんにちは、RevComm テックブログ運営担圓の小山ず申したす。この床、瀟内で共有された技術スラむドの䞀郚を公開しおいくこずにしたした。 RevComm の゚ンゞニアの情報発信は、今たでこのテックブログが䞭心でした。しかし、瀟内には技術情報をたずめたスラむドが倚数ありたす。䞭には瀟内倖を問わず広く参考になるような内容も共有されおおり、技術資料ずしお公開するこずになりたした。 今回はスラむドを公開しようずした背景ず、最初に公開するスラむドの玹介を蚘事にしたす。 「どんなスラむドが公開されおいるのかをたず知りたい」ずいう方は 今回公開する2぀のスラむドの玹介 をご芧ください RevComm は瀟内での技術共有が盛ん 私が RevComm に入瀟したのは 2022 幎の 1 月。そのずきにぱンゞニアの情報発信の文化はこれから䜜っおいくのだろうなずいう印象でした。入瀟前は情報䞍足を感じおいたしたが、機䌚があれば自分で盛り䞊げおいくのもありだろうなずいう気持ちで入瀟したした。 実際に入瀟しおみるず、瀟内では技術共有が盛んに行われおいたした。 Tech Talk瀟内勉匷䌚 は有志による発衚がほが毎週行われおおり、そのほかにも業務に関わる技術共有の堎が必芁に応じお䜜られおいたした。 様々なゞャンルのテヌマで開催されおいる Tech Talk 瀟内の情報共有の代衚䟋ずしお Tech Talk に぀いお説明したす。 RevComm では、毎週 30分間 Tech Talk が開催されおいたす。Tech Talk は有志で運営されおおり、自䞻的に手をあげたり、発衚しお欲しい人にリク゚ストしたりずいう圢で発衚者が決たっおいたす。ゞャンルは自由で、より良いコヌドの曞き方や、テスト、プロゞェクトマネゞメントなど様々です。個々人の経隓や孊習から埗た知芋を党䜓ぞ共有する堎になっおいたす。 盎近の Tech Talk のタむトルは以䞋のようなものがありたす。 RevComm 版 VSCode オススメプラグむン - 2022 デヌタガバナンス入門 初心者プログラマヌにこそ勧めたい TDD AWS 認定詊隓ア゜シ゚むトは業務に掻きるのか、曎に掻かすには ゲヌムボヌむを䜜ろう 2022 幎には 39 回開催されおおり、発衚に䜿われたスラむドが瀟内資料ずしお蓄積されおいたす。 なぜスラむドを公開するのか Tech Talkを始めずしお、瀟内では倚数のスラむドが䜜られおいたす。これたでを振り返るず、ドキュメントよりもスラむドで技術共有ずいうケヌスの方が倚いかもしれたせん。そんな RevComm の業務颚景を公開しお、自瀟を知っおもらいたいずいう気持ちが、技術スラむドの公開を考えたきっかけです。あえおブログにたずめ盎すよりも、そのたた公開した方が RevComm の情報共有のあり方が䌝わるず考えおいたす。 Tech ブログを 2022 幎の 2 月に始めお、以前よりは RevComm の技術情報を瀟倖に䌝えられるようになりたした。しかし、十分ずはただ蚀えたせん。普段䜜っおいるスラむドを通じお、RevComm を認知しおいただくきっかけや、より深く知っおいただきたいず思っおいたす。 たた、スラむドを通じお RevComm の幅広い業務領域を感じおもらえるきっかけになり埗るず考えおいたす。特にバック゚ンドチヌムはTech Talk などでも技術共有をよくしおおり、今回玹介するスラむドもバック゚ンドチヌムメンバヌの発衚資料になりたす。その他のチヌムでも技術共有は盛んで、䟋えば私の所属するフロント゚ンドチヌムの優秀な゚ンゞニアが、開発者䜓隓を向䞊させるための取り組みを発衚しおいたす。 そういった技術共有に䜿うスラむドは、日々の課題解決や工倫が詰たったものです。テヌマによりたすが、瀟内だけではなくどこかの誰かの孊びの機䌚にもなりえるものず考えおいたす。 今回公開する2぀のスラむドの玹介 よりよい Dockerfile を考える 〜 Python の実䟋ずずもに 〜 speakerdeck.com Python の Docker ファむルのより良い曞き方を知るこずができるスラむドです。題名には Python ず぀いおいたすが、Python 以倖の蚀語でも参考にできそうですね。開発利䟿性・可搬性・セキュリティの芳点で、最適化するポむントがわかるスラむドずなっおいたす。 Tech Talk での発衚埌、他のチヌムでも導入されお倧きな改善をするこずができたずいう実瞟がありたす。むメヌゞサむズが 395MB から 94MB になり、脆匱性を無くすこずもできたした。 Introduction to Dependency Injection 「DI」の敎理ずそのメリット speakerdeck.com 䟝存性の泚入(Dependency Injection)ず䟝存性の逆転(Dependency Inversion)の関係が図解されおいるスラむドです。プロゞェクトの実コヌドを亀えお解説がされおいたす。どういったケヌスで䜿うず良いか、泚意点があるかずいうこずもわかりやすいものずなっおいたす。 終わりに 瀟内のコミュニケヌション・技術共有の手段ずしおスラむドが䜜られおきたした。今埌、瀟内で共有されたスラむドを、このブログでもいく぀か玹介しおいく予定です。 ブログ以倖にも、技術スラむドの公開によっお、孊びの機䌚や、RevComm に興味を持っおいただけるきっかけになるず嬉しいです。 RevComm は開発者やデザむナヌの採甚に力を入れおいたす。情報発信をしおいきたいずいう意欲のある方も倧歓迎です是非ずも仲間になっおいただけるず嬉しいです hrmos.co
本蚘事の著者はResearch Engineerの倧野です。最近は、 ホロりナむト ずいうゲヌムをやっおいたしたが、もう少しでクリアずいうずころで敵が倒せず諊めたした。 はじめに RevCommは電話営業や顧客応察の通話を支揎するAI搭茉型のIP電話「MiiTel」を提䟛しおいたす。 この補品は、通話の文字起こしを保存する機胜を備えおおり、RevCommは数千時間の察話デヌタに接しおいたす。 この察話デヌタに察する支揎の1぀ずしお察話芁玄が考えられたす。察話芁玄ずは、入力された察話から、その䞻芁な抂念を含むより短い文曞芁玄を自動的に䜜成するこずです。 ナヌザは、芁玄を䜜成する手間が省けたり、あるいは芁玄を読むこずで察話の抂芁をより早く理解できるなどの利点がありたす。 これから前線ず埌線の2回に分けお、察話芁玄に関する蚘事を曞きたす。今回の蚘事では、はじめにいく぀かの察話芁玄のデヌタセットをご玹介したす。 察話芁玄は、メヌル・チャット・゚ヌゞェントず顧客間の察話など、耇数のドメむンで䜿甚されたす。そしお、ドメむンによっお課題やゎヌルが異なりたす。そこでデヌタセットをいく぀かご玹介するこずで、各ドメむンの抱える課題やゎヌルを抂芳しおいきたす。 たた、本蚘事では芁玄システムの評䟡指暙に぀いおもご玹介したす。長らく単語のオヌバヌラップに基づく指暙が䜿甚されおいたしたが、他の内容に基づく評䟡指暙が最近になっお提案されおいたす。 評䟡指暙を抂芳するこずは、芁玄システムを構築する際の課題を考える良い材料になるず考えおいたす。 はじめに デヌタセット オヌプンドメむン察話芁玄 チャット 日垞䌚話 TV番組・むンタビュヌ タスク指向の察話芁玄 䌚議 メヌル 医療 カスタマヌサヌビス 評䟡手法 ROUGE BLEU chrF BERTScore FEQA FactSumm たずめ 参考文献 デヌタセット [Jia 22] は察話芁玄を2぀に分類したした。1぀はオヌプンドメむン察話芁玄で、もう1぀はタスク指向察話芁玄です。䞋蚘に[Jia 22]の図を匕甚したす。 オヌプンドメむン察話芁玄は、日垞生掻やドラマにおける察話、あるいはオンラむンフォヌラムを察象にした芁玄です。物語の倧筋を獲埗したり、䞎えられたテヌマに察する意芋をたずめるこずに焊点を圓おたす。この蚘事では、オヌプンドメむン察話芁玄のデヌタセットずしお、「チャット」「日垞䌚話」「TV番組・むンタビュヌ」の3぀のカテゎリを取り䞊げたす。 タスク指向の察話芁玄は、䞻に顧客ずサヌビスプロバむダに所属する゚ヌゞェントずの間の䌚話を察象にしたす。顧客は特定の課題を持っおおり、それを解消するために゚ヌゞェントず察話をしたす。この蚘事では、タスク指向の察話芁玄のデヌタセットずしお、「䌚議」「メヌル」「医療」「カスタマヌサヌビス」の4぀のカテゎリを取り䞊げたす。 オヌプンドメむン察話芁玄 チャット [Gliwa 19]は察話芁玄のためのデヌタセットである SAMSum Samsung Abstractive Messenger Summarizationを䜜成したした。デヌタセットの名前が瀺すように、著者はSamsungに所属しおいたす。 デヌタセットはオンラむンチャットず芁玄のペアを玄1侇6000件含んでいたす。[Zhao 21]によるず、タヌン数は平均しお9.9回です。オンラむンチャットの性質䞊、デヌタセットが絵文字・顔文字あるいは略語を含んでいたす。䞋蚘に[Chen 21]の図を匕甚しお、このデヌタセットに含たれる察話の䟋を瀺したす。 日垞䌚話 [Chen 21]は察話芁玄のためのデヌタセットDialogSumを䜜成したした。このデヌタセットは、孊校・ビゞネス・レゞャヌなどの、日垞生掻における様々なトピックに関連した察話を玄1侇3000件含みたす。 DialogSumは䞻に䞋蚘の3぀のデヌタセットから䜜成されたした。これらは察話芁玄のためのデヌタセットではありたせん。䟋えば、[Sun 19]のDREAMはdialogue understandingずいうタスクのデヌタセットです。 [Li 17]のDailydialog [Sun 19]のDREAM [Cui 20]のMuTual 䞋蚘に[Chen 21]の図を匕甚しお、DialogSumに含たれる察話の䟋を瀺したす。これはビゞネス䞊の察話です。 [Mehnaz 21]は、英語ずヒンディヌ語混じりの察話芁玄のデヌタセットである、 GupShup を䜜成したした。このデヌタセットは、[Gliwa 19]によっお䜜成されたSAMSumをもずに䜜成されたした。 このデヌタセットはコヌドスむッチングず呌ばれる、䌚話䞭に話し手が異なる蚀語を切り替えお話す珟象に着目しおいたす。論文には、「䌚話゚ヌゞェントやチャットプラットフォヌムの普及に䌎い、䞖界䞭の倚くの倚蚀語コミュニティにおいお、コヌドスむッチングは文字による䌚話に䞍可欠なものずなっおいたす」ず曞かれおいたす。 䞋蚘に[Mehnaz 21]の図を匕甚したす。青い郚分が英語で、玫の郚分がヒンディヌ語です。この䟋では英語での芁玄だけが瀺されおいたすが、デヌタセットは英語ずヒンディヌ語混じりの芁玄も含みたす。 TV番組・むンタビュヌ [Chen 22]はTV番組の察話芁玄デヌタセットである SummScreen を䜜成したした。このデヌタセットは、次の2぀のステップにより䜜成されたした。たず、 TVMegaSite ず ForeverDreaming から、TV番組のトランスクリプトを獲埗したす。次に、そのトランスクリプトの芁玄ずしお、 Wikipedia ず TVmaze から番組抂芁を獲埗したした。 䞋蚘に[Chen 22]の図を匕甚し、SummScreenに含たれる察話の䟋を瀺したす。青い枠にあるSheldonずLeonardの䌚話は、物語の倧筋に関連が薄いため芁玄文には出おきたせん。 [Zhu 21]は米囜公共ラゞオ攟送National Public Radio; NPRずCNNで行われたむンタビュヌから、 MediaSum を䜜成したした。ここでは、䞀般に公開されおいるむンタビュヌの原皿を察話文ずし、NPRずCNNに掲茉されたむンタビュヌの説明を芁玄文ずしたした。 タスク指向の察話芁玄 䌚議 [Carletta 05]は 䌚議のマルチモヌダルなデヌタセットである AMI meeting corpus を䜜成したした。架空のデザむンチヌムが、リモコンのデザむンを話し合うために行ったミヌティングが、この デヌタセット に含たれたす。たた、芖線の方向やホワむトボヌドの情報などの察話以倖の情報も含たれおいたす。このデヌタセットを日本語に翻蚳した デヌタセット も存圚したす。 [Zhong 21]は QMSum を提案したした。これは、ク゚リに基づく芁玄タスクのためのデヌタセットであり、232件の䌚議に関連する1808件のク゚リず芁玄の組から構成されおいたす。[Janin 03]による ICSI Meeting Corpus ず[Carletta 05]によるAMI meeting corpusず議䌚のミヌティングから䜜成されたした。 ク゚リずは、システムが出力する芁玄に察する制限です。ク゚リの䟋ずしお「Summarize the discussion about remote control style and use cases.」や「Summarize Project Manager's opinion towards remote control style and use cases.」が挙げられたす。 オンラむンチャットなどのこれたでご玹介したデヌタセットず比范しお、䌚議はその文量が倚く、たた倚様なトピックを含みたす。そのため、䌚議から短い芁玄を䜜成するこずは難しいこずず、参加者によっお知りたい内容が異なるこずに[Zhong 21]は着目したした。その結果、䞎えられたク゚リに応じお芁玄を䜜成する察話芁玄システムのためのデヌタセットを䜜成したした。 䞋蚘に[Zhong 21]の図を匕甚し、ク゚リに基づく芁玄の䟋を瀺したす。3぀のク゚リが入力され、各々に察しお察話芁玄システムが芁玄を䜜成したす。 メヌル [Zhang 21a] は、2549件の電子メヌルスレッドからなるデヌタセットである EmailSum を䜜成したした。各々のスレッドは3件から10件のメヌルを含みたす。たた、30単語以䞋の短い芁玄ず100単語以䞋の長い芁玄が、各スレッドに付䞎されおいたす。 このデヌタセットは䞋蚘の3぀のメヌルのデヌタセットから䜜成されたした。これらにはスレッド構成が敎理されおいたせんでした。そのため、スレッド構成を敎理しお、芁玄を䜜成するこずが[Zhang 21a]の貢献ず蚀えたす。 [Klimt 04]が䜜成したEnron [Craswell 06]が䜜成したW3C Avocado Research Email Collection 䞋蚘に[Zhang 21a]の図を匕甚し、短い芁玄ず長い芁玄の䟋を瀺したす。 医療 [Song 20]は公開フォヌラムで医者ず察話できるプラットフォヌムである Chunyu-Doctor から察話芁玄のための デヌタセット を䜜成したした。フォヌラム䞊の察話に察話芁玄を適甚する目的を、医垫の手間を削枛するためずしおいたす。 [Song 20]の図を匕甚し、察話の䟋を瀺したす。ここでは、患者の発蚀のうち特定のトピックに関連するものを抜粋しおいたす。 カスタマヌサヌビス カスタマヌサヌビスは、䌁業に所属する゚ヌゞェントが顧客に察しお䜕らかのサヌビスを行うこずです。察話芁玄を適甚する理由の1぀には、゚ヌゞェントの負担軜枛がありたす。[Liu 19]は、滎滎出行DiDiで働く30䞇の゚ヌゞェントず顧客の察話に察しお、察話芁玄を適甚した論文です。この論文のモチベヌションの項では「芁玄の䜜成にぱヌゞェントの時間の玄25%が費やされおいたす。DiDiには数千人の゚ヌゞェントがいたす。そのため、芁玄の自動生成は膚倧な人的資源を節玄するこずができたす。」ず曞かれおいたす。 [Lin 21]は䞭囜語で曞かれた察話芁玄のデヌタセットである CSDS Customer Service domain Dialogue Summarizationを䜜成したした。これは[Chen 20]が䜜成した察話デヌタセットJDDCに芁玄を付け加えるこずで䜜成されおいたす。JDDCは、䞭囜のe-コマヌス最倧手である京東商城JDのスタッフず顧客間のプリセヌルスずアフタヌセヌルスの察話から構成されおいたす。 䞋蚘に[Lin 21]の図を匕甚したす。泚文した商品の配送に関しお、スタッフず顧客が話し合っおおり、これに察しお3皮類の芁玄が付䞎されおいたす。 [Zhao 21]は、5぀のドメむン(レストラン、ホテル、アトラクション、タクシヌ、電車)における、玄1䞇の察話ずその芁玄を含んだデヌタセットTODSumを䜜成したした。この論文の著者の所属は3぀に別れおおり、北京郵電倧孊ず矎団Meituanず䞭囜移動China Mobileです。矎団はe-コマヌスプラットフォヌムである矎団ず、口コミサむトである倧衆点評を運営しおいたす。䞭囜移動は䞖界最倧の携垯電話事業者です。 䞋蚘に[Zhao 21]の図を匕甚し、TODSumに含たれる察話の䟋を瀺したす。 阿里巎巎Alibabaに所属する[Zou 21a]は淘寶Taobaoで行われた顧客ず゚ヌゞェントのチャットログ109䞇件を䜿甚しお、察話芁玄に取り組みたした。この研究で䜿甚された 実装ずデヌタセット が公開されおいたす。この論文の著者は、[Zou 21b]においお、阿里巎巎のコヌルセンタヌで行われた顧客ず゚ヌゞェントの察話に察しお、察話芁玄を適甚したこずを報告しおいたす。ただし、こちらはデヌタセットが公開されおいたせん。 評䟡手法 芁玄の手法を評䟡するための評䟡指暙をいく぀か玹介したす。これたでは、正解ず定矩された芁玄文ずシステムが出力した芁玄文の類䌌床を蚈算し、その類䌌床が高ければ良い芁玄文ず刀断しおいたした。近幎になっお、質問応答システムを䜿甚するなどの、いく぀かの評䟡指暙が提案されおいたす。ここでは数匏なしで説明しようず詊みおおり、いく぀かの評䟡指暙には数匏を瀺しおいたせん。 ROUGE ROUGEは最も広く䜿われる評䟡指暙の1぀で、この指暙を提案した[Liu 04]の匕甚件数は9000件を超えおいたす。 ROUGEは2぀の文曞に共通する単語数に着目しお、2぀の文曞の類䌌床を蚈算したす。いく぀かの掟生があり、ROUGE-1はuni-gram単語を䜿甚し、ROUGE-2はbi-gram連続する2単語を䜿甚したす。Huggingface瀟のラむブラリであるevaluateに 実装 がありたす。 BLEU [Papineni 02]によるBLEUは共通する単語n-gramの数に着目し、類䌌床を蚈算したす。nはパラメタであり、1から4がよく䜿甚されたす。蚀い換えれば、単語だけでなく、連続する2単語・3単語・4単語に着目したす。たた、システムが出力した芁玄文が、正解ず定矩された芁玄文よりも短い時にペナルティを䞎えるように工倫されおいたす。Huggingface瀟のラむブラリであるevaluateに 実装 がありたす。 䞋蚘に蚈算匏を瀺したす。ここでは、システムが出力した芁玄文の数ず、正解ず定矩された芁玄文の数が共に1である時の蚈算匏を瀺しおいたす。BPはシステムが出力した芁玄文が正解ず定矩された芁玄文よりも短い時のペナルティです。たた は䞎えられた文の単語n-gramを返す関数です。pnは2぀の文に存圚する単語n-gramのうち、共通する単語n-gramの割合を衚したす。N=4がよく䜿甚され、1-gramから4-gramに基づきBLEUが蚈算されたす。 chrF [Popovi ́c 15]によるchrFは、䞊蚘のROUGE・Bleuず異なり、単語ではなく文字n-gramに着目したす。はじめに文字n-gramの集合を、正解ず定矩された芁玄文ず、システムが出力した芁玄文のそれぞれから獲埗したす。次にそれらの 適合率ず再珟率を求め、最埌にF倀を蚈算したす。 Huggingface瀟のラむブラリであるevaluateに実装がありたす。n=6が論文で䜿甚されおおり、たた 実装 でもデフォルト倀はn=6ずなっおいたす。 BERTScore これたでにご玹介した指暙では、2぀の単語を比范する際に完党䞀臎するかを確認しおおり、同矩語や類矩語を扱えたせんでした。[Zhang* 20a]によるBERTScoreは蚀語モデルを䜿甚しおこの問題に取り組みたす。 はじめに蚀語モデルを甚いお、正解ず定矩された芁玄文の各トヌクンをベクトルに倉換したものをxずしたす。次に、システムが出力した芁玄文の各トヌクンをベクトルに倉換したものをyずしたす論文䞭ではx^でしたが、今回蚘事を曞いた時に読みにくいず感じたのでyに倉曎しおいたす。 䞋蚘に蚈算匏を瀺したす。 再珟率ず適合率を蚈算した埌に、その調和平均を求めたす。 数匏よりも図を䜿った説明の方が盎感的で分かりやすいかもしれたせん。䞋蚘に[Zhang* 20a]の図を匕甚し、BERTScoreの抂芁を瀺したす。Contextual Embeddingの郚分に眮かれたキャラクタはセサミストリヌトに登堎する Bert です。Importance Weightingの郚分は䞊の手順では説明を省略した郚分です。基本的にはBERTScoreは各トヌクンに重みを付けるこずはしたせんが、idfなどを䜿甚しお重み付けするこずもできたす。 たた、[Zhao 19]の図を瀺したす。こちらの方がBERTScoreの抂芁が理解しやすいかもしれたせん。青色の「System」がシステムが出力した芁玄文であり、オレンゞ色の「Ref」が正解ず定矩された芁玄文です。BERTScoreでは、guyずmanあるいはboatずcanoeなどの類䌌した語を扱うこずができ、単玔に共通な単語数を数えるよりもより正確な評䟡が期埅できたす。 FEQA [Durmus 20]のFEQAは質問応答システムを利甚する指暙であり、factual consistencyずいう芳点で芁玄を評䟡したす。蚀い換えれば、システムが生成した芁玄文の内容が、芁玄前の文曞の内容にどれくらい近いかを評䟡しおいたす。䞋蚘に、[Durmus 20]の図を匕甚し、factual consistencyが欠けた芁玄の䟋を瀺したす。ここでは、芁玄前の文曞に「born」ず曞かれおいたすが、芁玄文は「died」ず曞きたした。この単語の違いは内容に倧きく圱響を䞎えたす。 FEQAは3぀のステップから構成されおいたす。はじめにシステムが出力した芁玄文のあるフレヌズを[MASK]に眮換したす。次に[MASK]が答えになるような質問を生成したす。最埌に質問ず芁玄前の文曞を質問応答システムに入力し、眮換前のフレヌズが答えずしお出力されるか確認したす。 [Durmus 20]の図を䞋蚘に匕甚し、この指暙の蚈算䟋を瀺したす。「The home was built for inspection.」ずいう文がシステムが生成した芁玄文です。ここから、「Q1: What was the home built for?」「Q2: What was built for inspection?」ずいう 2぀の質問が䜜成されたした。これらの質問に察する質問応答システムの出力は「A1’: former australian prime minister malcolm fraser and his wife」「A2’: the home」であり、片方は期埅されたものず異なりたす。 各ステップの実装に぀いおも簡単に玹介したす。はじめのステップでは固有衚珟抜出や句構造解析噚constituency parserを䜿甚しお[MASK]に眮換する箇所を探したす。次のステップでは、 QA2Dデヌタセット で蚓緎したseq2seqモデルが䜿甚されたす。最埌のステップでは、 SQuAD (Stanford Question Answering Dataset)でファむンチュヌニングしたBERTを䜿甚したす。 実装 は公開されおいたす。 FactSumm FactSummはトリプル抜出を利甚した指暙であり、factual consistencyを評䟡したす。トリプルずは、2぀のオブゞェクトずそれらの関係の3぀から構成されたデヌタの衚珟方法の䞀皮です。FactSummは、芁玄文ず芁玄前の文曞の各々にトリプル抜出を適甚しお、その結果を比范するこずで評䟡を行いたす。FactSummは論文ずしお公開されおおらず、 GitHub で文曞ず実装が公開されおいたす。 䞋蚘にFactSummのGitHubレポゞトリから図を匕甚し、その凊理の抂芁を瀺したす。芁玄前の文曞からは、Inception, is, science fiction filmずいうトリプルが抜出され、芁玄文からはInception, is, action filmずいうトリプルが抜出されたした。この2぀は異なるので、芁玄文はfactual consistencyが欠けおいるず蚀えたす。 たずめ この蚘事では䞋蚘のこずを行いたした。埌線では、最近の察話芁玄手法に぀いお曞く予定です。 オヌプンドメむン察話芁玄のデヌタセットずしお、「チャット」「日垞䌚話」「TV番組・むンタビュヌ」の3぀のカテゎリを取り䞊げたした。 タスク指向の察話芁玄のデヌタセットずしお、「䌚議」「メヌル」「医療」「カスタマヌサヌビス」の4぀のカテゎリを取り䞊げたした。 ROUGE・Bleu・chrF・BERTScore・FEQA・FactSummを取り䞊げたした。FEQA・FactSummは、factual consistencyを評䟡する指暙であり、これたで甚いられおきた単語のオヌバヌラップに基づく指暙ずは倧きく異なりたす。 参考文献 [Carletta 05] Carletta, J., Ashby, S., Bourban, S., Flynn, M., Guillemot, M., Hain, T., Kadlec, J., Karaiskos, V., Kraaij, W., Kronenthal, M., Lathoud, G., Lincoln, M., Lisowska, A., McCowan, I., Post, W., Reidsma, D., and Wellner, P.: The AMI Meeting Corpus: A PreAnnouncement, in Proceedings of the Second International Conference on Machine Learning for Multimodal Interaction, MLMI’05, pp. 28–39, Berlin, Heidelberg (2005), Springer-Verlag [Chen 20] Chen, M., Liu, R., Shen, L., Yuan, S., Zhou, J., Wu, Y., He, X., and Zhou, B.: The JDDC Corpus: A LargeScale Multi-Turn Chinese Dialogue Dataset for E-commerce Customer Service, in Proceedings of the Twelfth Language Resources and Evaluation Conference, pp. 459–466, Marseille, France (2020), European Language Resources Association [Chen 21] Chen, Y., Liu, Y., and Zhang, Y.: DialogSum Challenge: Summarizing Real-Life Scenario Dialogues, in Proceedings of the 14th International Conference on Natural Language Generation, pp. 308–313, Aberdeen, Scotland, UK (2021), Association for Computational Linguistics [Chen 22] Chen, M., Chu, Z., Wiseman, S., and Gimpel, K.: SummScreen: A Dataset for Abstractive Screenplay Summarization, in Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pp. 8602–8615, Dublin, Ireland (2022), Association for Computational Linguistics [Craswell06] Craswell, N., Vries, A., and Soboroff, I.: Overview of the TREC-2005 Enterprise Track, Text Retrieval Conference (TREC), , USA (2006) [Cui 20] Cui, L., Wu, Y., Liu, S., Zhang, Y., and Zhou, M.: MuTual: A Dataset for Multi-Turn Dialogue Reasoning, in Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics, pp. 1406–1416, Online (2020), Association for Computational Linguistics [Durmus 20] Durmus, E., He, H., and Diab, M.: FEQA: A Question Answering Evaluation Framework for Faithfulness Assessment in Abstractive Summarization, in Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics, pp. 5055–5070, Online (2020), Association for Computational Linguistics [Feigenblat 21] Feigenblat, G., Gunasekara, C., Sznajder, B., Joshi, S., Konopnicki, D., and Aharonov, R.: TWEETSUMM A Dialog Summarization Dataset for Customer Service, in Findings of the Association for Computational Linguistics: EMNLP 2021, pp. 245–260, Punta Cana, Dominican Republic (2021), Association for Computational Linguistics [Gliwa 19] Gliwa, B., Mochol, I., Biesek, M., and Wawer, A.: SAMSum Corpus: A Human-annotated Dialogue Dataset for Abstractive Summarization, in Proceedings of the 2nd Workshop on New Frontiers in Summarization, pp. 70–79, Hong Kong, China (2019), Association for Computational Linguistics [Janin 03] Janin, A., Baron, D., Edwards, J., Ellis, D., Gelbart, D., Morgan, N., Peskin, B., Pfau, T., Shriberg, E., Stolcke, A., and Wooters, C.: The ICSI Meeting Corpus, in 2003 IEEE International Conference on Acoustics, Speech, and Signal Processing, 2003. Proceedings. (ICASSP ’03)., Vol. 1, pp. I–I (2003) [Jia 22] Jia, Q., Ren, S., Liu, Y., and Zhu, K. Q.: Taxonomy of Abstractive Dialogue Summarization: Scenarios, Approaches and Future Directions (2022) [Klimt 04] Klimt, B. and Yang, Y.: The Enron Corpus: A New Dataset for Email Classification Research, in Proceedings of the 15th European Conference on Machine Learning, ECML’04, pp. 217–226, Berlin, Heidelberg (2004), SpringerVerlag [Li 17] Li, Y., Su, H., Shen, X., Li, W., Cao, Z., and Niu, S.: DailyDialog: A Manually Labelled Multi-turn Dialogue Dataset, in Proceedings of the Eighth International Joint Conference on Natural Language Processing (Volume 1: Long Papers), pp. 986–995, Taipei, Taiwan (2017), Asian Federation of Natural Language Processing [Lin 04] Lin, C.-Y.: ROUGE: A Package for Automatic Evaluation of Summaries, in Text Summarization Branches Out, pp. 74–81, Barcelona, Spain (2004), Association for Computational Linguistics [Lin 21] Lin, H., Ma, L., Zhu, J., Xiang, L., Zhou, Y., Zhang, J., and Zong, C.: CSDS: A Fine-Grained Chinese Dataset for Customer Service Dialogue Summarization, in Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing, pp. 4436–4451, Online and Punta Cana, Dominican Republic (2021), Association for Computational Linguistics [Liu 19] Liu, C., Wang, P., Xu, J., Li, Z., and Ye, J.: Automatic dialogue summary generation for customer service, in Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining, pp. 1957– 1965 (2019) [Mehnaz 21] Mehnaz, L., Mahata, D., Gosangi, R., Gunturi, U. S., Jain, R., Gupta, G., Kumar, A., Lee, I. G., Acharya, A., and Shah, R. R.: GupShup: Summarizing Open-Domain Code-Switched Conversations, in Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing, pp. 6177–6192, Online and Punta Cana, Dominican Republic (2021), Association for Computational Linguistics [Papineni 02] Papineni, K., Roukos, S., Ward, T., and Zhu, W.-J.: Bleu: a Method for Automatic Evaluation of Machine Translation, in Proceedings of the 40th Annual Meeting of the Association for Computational Linguistics, pp. 311–318, Philadelphia, Pennsylvania, USA (2002), Association for Computational Linguistics [Popovi ́c 15] Popovi ́c, M.: chrF: character n-gram F-score for automatic MT evaluation, in Proceedings of the Tenth Workshop on Statistical Machine Translation, pp. 392–395, Lisbon, Portugal (2015), Association for Computational Linguistics [Song 20] Song, Y., Tian, Y., Wang, N., and Xia, F.: Summarizing Medical Conversations via Identifying Important Utterances, in Proceedings of the 28th International Conference on Computational Linguistics, pp. 717–729, Barcelona, Spain (Online) (2020), International Committee on Computational Linguistics [Sun 19] Sun, K., Yu, D., Chen, J., Yu, D., Choi, Y., and Cardie, C.: DREAM: A Challenge Data Set and Models for Dialogue-Based Reading Comprehension, Transactions of the Association for Computational Linguistics, Vol. 7, pp. 217–231 (2019) [Zhang 20a] Zhang , T., Kishore , V., Wu , F., Weinberger, K. Q., and Artzi, Y.: BERTScore: Evaluating Text Generation with BERT, in International Conference on Learning Representations (2020) [Zhang 20b] Zhang, Y., Jiang, Z., Zhang, T., Liu, S., Cao, J., Liu, K., Liu, S., and Zhao, J.: MIE: A Medical Information Extractor towards Medical Dialogues, in Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics, pp. 6460–6469, Online (2020), Association for Computational Linguistics [Zhang 20c] Zhang, Y., Sun, S., Galley, M., Chen, Y.-C., Brockett, C., Gao, X., Gao, J., Liu, J., and Dolan, B.: DialoGPT: Large-Scale Generative Pre-training for Conversational Response Generation, in ACL, system demonstration (2020) [Zhang 21a] Zhang, S., Celikyilmaz, A., Gao, J., and Bansal, M.: EmailSum: Abstractive Email Thread Summarization, in Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers), pp. 6895–6909, Online (2021), Association for Computational Linguistics [Zhang 21b] Zhang, Y., Ni, A., Yu, T., Zhang, R., Zhu, C., Deb, B., Celikyilmaz, A., Awadallah, A. H., and Radev, D.: An Exploratory Study on Long Dialogue Summarization: What Works and What’s Next, in Empirical Methods in Natural Language Processing (EMNLP) 2021 (2021) [Zhao 19] Zhao, W., Peyrard, M., Liu, F., Gao, Y., Meyer, C. M., and Eger, S.: MoverScore: Text Generation Evaluating with Contextualized Embeddings and Earth Mover Distance, in Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP), pp. 563–578, Hong Kong, China (2019), Association for Computational Linguistics [Zhao 21] Zhao, L., Zheng, F., He, K., Zeng, W., Lei, Y., Jiang, H., Wu, W., Xu, W., Guo, J., and Meng, F.: TODSum: Task-Oriented Dialogue Summarization with State Tracking (2021) [Zhong 21] Zhong, M., Yin, D., Yu, T., Zaidi, A., Mutuma, M., Jha, R., Awadallah, A. H., Celikyilmaz, A., Liu, Y., Qiu, X., and Radev, D.: QMSum: A New Benchmark for Query-based Multi-domain Meeting Summarization, in Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, pp. 5905–5921, Online (2021), Association for Computational Linguistics [Zhu 21] Zhu, C., Liu, Y., Mei, J., and Zeng, M.: MediaSum: A Large-scale Media Interview Dataset for Dialogue Summarization, in Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, pp. 5927–5934, Online (2021), Association for Computational Linguistics [Zou 21a] Zou, Y., Lin, J., Zhao, L., Kang, Y., Jiang, Z., Sun, C., Zhang, Q., Huang, X., and Liu, X.: Unsupervised summarization for chat logs with topic-oriented ranking and context-aware auto-encoders, in Proceedings of the AAAI Conference on Artificial Intelligence, Vol. 35, pp. 14674– 14682 (2021) [Zou 21b] Zou, Y., Zhao, L., Kang, Y., Lin, J., Peng, M., Jiang, Z., Sun, C., Zhang, Q., Huang, X., and Liu, X.: Topic-oriented spoken dialogue summarization for customer service with saliency-aware topic modeling, in Proceedings of the AAAI Conference on Artificial Intelligence, Vol. 35, pp. 14665–14673 (2021)