FastLabelの開発部で機械学習エンジニアをしている山田です。本記事では、LLMのインストラクションチューニングデータを合成データを用いて生成する際の勘所を紹介します。合成データは、LLMのインストラクションチューニングデータを生成するために非常に有用ですが、質の高い合成データを生成するためにはいくつかの工夫が必要です。実際に、プログラミング言語に関する合成データを生成する際に、どのような工夫をしたかを紹介します。インストラクションチューニングデータを作成する際の課題LLMの学習は、主に以下の3つのステップで行われます。%3Cdiv%20class%3D%22point%20point1%22%3E%20%0A%3Cdiv%20class%3D%22title%22%3E%20%0A%3Cp%20class%3D%22txt%22%3ESTEP%201%3C%2Fp%3E%20%0A%3Cp%20class%3D%22tit%22%3E%E4%BA%8B%E5%89%8D%E5%AD%A6%E7%BF%92%3C%2Fp%3E%3C%2Fdiv%3E%20%0A%3Cdiv%20class%3D%22desc%22%3E%20%0A%3Cp%20class%3D%22text%22%3EWeb%E3%82%84%E6%9B%B8%E7%B1%8D%E3%81%AA%E3%81%A9%E5%A4%A7%E9%87%8F%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8B%E3%82%89%E6%AC%A1%E3%81%AE%E5%8D%98%E8%AA%9E%E3%82%92%E4%BA%88%E6%B8%AC%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E5%AD%A6%E7%BF%92%0A%3C%2Fp%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%20%0A%0A%3Cstyle%3E%20%0A.point%7B%20%0Abackground%3A%20%23FFFFFF%3B%20%0Aborder-radius%3A%208px%3B%20%0Aflex%3A%20none%3B%20%0Aheight%3A%20auto%3B%20%0Apadding%3A%2030px%3B%20%0Awidth%3A%20100%25%3B%20%0Amax-width%3A%20100%25%3B%20%0Abox-sizing%3A%20border-box%3B%20%0A%7D%20%0A.point%20.title%7B%20%0Adisplay%3A%20flex%3B%20%0Ajustify-content%3A%20flex-start%3B%20%0Aalign-items%3A%20flex-start%3B%20%0Amargin%3A%200px%200px%2015px%200px%3B%20%0Awidth%3A%20100%25%3B%20%0Amax-width%3A%20100%25%3B%20%0A%7D%20%0A.point%20p%7B%20%0Amargin%3A%200%3B%20%0Afont-size%3A%2017px%3B%20%0Aline-height%3A%201.79%3B%20%0Afont-weight%3A%20400%3B%20%0Afont-family%3A%20Lato%3B%20%0Acolor%3A%20%23333%3B%20%0A%7D%20%0A.point%20.txt%7B%20%0Amargin-right%3A%2010px%3B%20%0Abackground%3A%20%23535fff%3B%20%0Aborder-radius%3A%20100px%3B%20%0Afont-size%3A%2014px%3B%20%0A%0Aline-height%3A%201.4%3B%20%0Acolor%3A%20%23fff%3B%20%0Apadding%3A%202px%2015px%202px%2015px%3B%20%0Afont-family%3A%20system-ui%3B%20%0A%7D%20%0A.point%20.tit%7B%20%0Afont-size%3A%2018px%3B%20%0Afont-weight%3A%20700%3B%20%0Aline-height%3A%201.4%3B%20%0A%7D%20%0A.point1%7B%20%0Aborder%3A%201px%20solid%20%23535fff%3B%20%0A%7D%20%0A.point1%20.tit%7B%20%0Acolor%3A%20%23535fff%3B%20%0A%7D%20%0A.point2%7B%20%0Aborder%3A%201px%20solid%20%233fa9f5%3B%20%0A%7D%20%0A.point2%20.txt%7B%20%0Abackground%3A%20%233fa9f5%3B%20%0A%7D%20%0A.point3%7B%20%0Abackground%3A%20%23f6f9fc%3B%20%0A%7D%20%0A%40media%20screen%20and%20(max-width%3A%20540px)%20%7B%20%0A.point%20%7B%20%0Apadding%3A%2020px%3B%20%0A%7D%20%0A.point%20.title%7B%20%0Aflex-direction%3A%20row%3B%20%0Aflex-wrap%3A%20wrap%3B%20%0A%7D%20%0A.point%20.tit%7B%20%0Aflex%3A%200%200%20100%25%3B%20%0Amargin-top%3A%2015px%3B%20%0A%7D%20%0A%7D%20%0A%3C%2Fstyle%3E%3Cdiv%20class%3D%22point%20point1%22%3E%20%0A%3Cdiv%20class%3D%22title%22%3E%20%0A%3Cp%20class%3D%22txt%22%3ESTEP%202%3C%2Fp%3E%20%0A%3Cp%20class%3D%22tit%22%3E%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%0A%3C%2Fp%3E%3C%2Fdiv%3E%20%0A%3Cdiv%20class%3D%22desc%22%3E%20%0A%3Cp%20class%3D%22text%22%3E%E7%89%B9%E5%AE%9A%E3%81%AE%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%A7%E3%81%AE%E6%80%A7%E8%83%BD%E3%82%92%E5%90%91%E4%B8%8A%E3%81%95%E3%81%9B%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%9B%AE%E7%9A%84%E3%81%A8%E3%81%99%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%B3%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%0A%3C%2Fp%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%20%0A%0A%3Cstyle%3E%20%0A.point%7B%20%0Abackground%3A%20%23FFFFFF%3B%20%0Aborder-radius%3A%208px%3B%20%0Aflex%3A%20none%3B%20%0Aheight%3A%20auto%3B%20%0Apadding%3A%2030px%3B%20%0Awidth%3A%20100%25%3B%20%0Amax-width%3A%20100%25%3B%20%0Abox-sizing%3A%20border-box%3B%20%0A%7D%20%0A.point%20.title%7B%20%0Adisplay%3A%20flex%3B%20%0Ajustify-content%3A%20flex-start%3B%20%0Aalign-items%3A%20flex-start%3B%20%0Amargin%3A%200px%200px%2015px%200px%3B%20%0Awidth%3A%20100%25%3B%20%0Amax-width%3A%20100%25%3B%20%0A%7D%20%0A.point%20p%7B%20%0Amargin%3A%200%3B%20%0Afont-size%3A%2017px%3B%20%0Aline-height%3A%201.79%3B%20%0Afont-weight%3A%20400%3B%20%0Afont-family%3A%20Lato%3B%20%0Acolor%3A%20%23333%3B%20%0A%7D%20%0A.point%20.txt%7B%20%0Amargin-right%3A%2010px%3B%20%0Abackground%3A%20%23535fff%3B%20%0Aborder-radius%3A%20100px%3B%20%0Afont-size%3A%2014px%3B%20%0A%0Aline-height%3A%201.4%3B%20%0Acolor%3A%20%23fff%3B%20%0Apadding%3A%202px%2015px%202px%2015px%3B%20%0Afont-family%3A%20system-ui%3B%20%0A%7D%20%0A.point%20.tit%7B%20%0Afont-size%3A%2018px%3B%20%0Afont-weight%3A%20700%3B%20%0Aline-height%3A%201.4%3B%20%0A%7D%20%0A.point1%7B%20%0Aborder%3A%201px%20solid%20%23535fff%3B%20%0A%7D%20%0A.point1%20.tit%7B%20%0Acolor%3A%20%23535fff%3B%20%0A%7D%20%0A.point2%7B%20%0Aborder%3A%201px%20solid%20%233fa9f5%3B%20%0A%7D%20%0A.point2%20.txt%7B%20%0Abackground%3A%20%233fa9f5%3B%20%0A%7D%20%0A.point3%7B%20%0Abackground%3A%20%23f6f9fc%3B%20%0A%7D%20%0A%40media%20screen%20and%20(max-width%3A%20540px)%20%7B%20%0A.point%20%7B%20%0Apadding%3A%2020px%3B%20%0A%7D%20%0A.point%20.title%7B%20%0Aflex-direction%3A%20row%3B%20%0Aflex-wrap%3A%20wrap%3B%20%0A%7D%20%0A.point%20.tit%7B%20%0Aflex%3A%200%200%20100%25%3B%20%0Amargin-top%3A%2015px%3B%20%0A%7D%20%0A%7D%20%0A%3C%2Fstyle%3E%3Cdiv%20class%3D%22point%20point1%22%3E%20%0A%3Cdiv%20class%3D%22title%22%3E%20%0A%3Cp%20class%3D%22txt%22%3ESTEP%203%3C%2Fp%3E%20%0A%3Cp%20class%3D%22tit%22%3ERLHF%0A%3C%2Fp%3E%3C%2Fdiv%3E%20%0A%3Cdiv%20class%3D%22desc%22%3E%20%0A%3Cp%20class%3D%22text%22%3E%E5%A5%BD%E3%81%BE%E3%81%97%E3%81%8F%E3%81%AA%E3%81%84%E5%87%BA%E5%8A%9B%E3%82%92%E6%B8%9B%E3%82%89%E3%81%99%E3%81%9F%E3%82%81%E3%81%AE%E5%BC%B7%E5%8C%96%E5%AD%A6%E7%BF%92%0A%3C%2Fp%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%20%0A%0A%3Cstyle%3E%20%0A.point%7B%20%0Abackground%3A%20%23FFFFFF%3B%20%0Aborder-radius%3A%208px%3B%20%0Aflex%3A%20none%3B%20%0Aheight%3A%20auto%3B%20%0Apadding%3A%2030px%3B%20%0Awidth%3A%20100%25%3B%20%0Amax-width%3A%20100%25%3B%20%0Abox-sizing%3A%20border-box%3B%20%0A%7D%20%0A.point%20.title%7B%20%0Adisplay%3A%20flex%3B%20%0Ajustify-content%3A%20flex-start%3B%20%0Aalign-items%3A%20flex-start%3B%20%0Amargin%3A%200px%200px%2015px%200px%3B%20%0Awidth%3A%20100%25%3B%20%0Amax-width%3A%20100%25%3B%20%0A%7D%20%0A.point%20p%7B%20%0Amargin%3A%200%3B%20%0Afont-size%3A%2017px%3B%20%0Aline-height%3A%201.79%3B%20%0Afont-weight%3A%20400%3B%20%0Afont-family%3A%20Lato%3B%20%0Acolor%3A%20%23333%3B%20%0A%7D%20%0A.point%20.txt%7B%20%0Amargin-right%3A%2010px%3B%20%0Abackground%3A%20%23535fff%3B%20%0Aborder-radius%3A%20100px%3B%20%0Afont-size%3A%2014px%3B%20%0A%0Aline-height%3A%201.4%3B%20%0Acolor%3A%20%23fff%3B%20%0Apadding%3A%202px%2015px%202px%2015px%3B%20%0Afont-family%3A%20system-ui%3B%20%0A%7D%20%0A.point%20.tit%7B%20%0Afont-size%3A%2018px%3B%20%0Afont-weight%3A%20700%3B%20%0Aline-height%3A%201.4%3B%20%0A%7D%20%0A.point1%7B%20%0Aborder%3A%201px%20solid%20%23535fff%3B%20%0A%7D%20%0A.point1%20.tit%7B%20%0Acolor%3A%20%23535fff%3B%20%0A%7D%20%0A.point2%7B%20%0Aborder%3A%201px%20solid%20%233fa9f5%3B%20%0A%7D%20%0A.point2%20.txt%7B%20%0Abackground%3A%20%233fa9f5%3B%20%0A%7D%20%0A.point3%7B%20%0Abackground%3A%20%23f6f9fc%3B%20%0A%7D%20%0A%40media%20screen%20and%20(max-width%3A%20540px)%20%7B%20%0A.point%20%7B%20%0Apadding%3A%2020px%3B%20%0A%7D%20%0A.point%20.title%7B%20%0Aflex-direction%3A%20row%3B%20%0Aflex-wrap%3A%20wrap%3B%20%0A%7D%20%0A.point%20.tit%7B%20%0Aflex%3A%200%200%20100%25%3B%20%0Amargin-top%3A%2015px%3B%20%0A%7D%20%0A%7D%20%0A%3C%2Fstyle%3E※ 2025年4月時点では、新しい手法が増えてきているので、必ずしも上記のようなステップで学習されているとは限りません。インストラクションチューニングデータには、タスクごとに指示文と期待される出力のペアが大量に必要になりますが、人間が0から作成するのは大変なので、一般的には合成用のLLMを使って合成データを生成して利用することが多いです。しかし、特殊なタスクやドメインにおいては、合成用LLMが生成したデータは十分な質ではないことが往々にしてあるため、人間の有識者にチェックと修正をしてもらうことが重要です。FastLbelでも、合成用LLMによる合成データ生成と人間による修正の2段階のアプローチを取っています。本記事では、合成データを使ったLLMのインストラクションチューニングデータ作成を実施した中で見えてきた勘所を紹介します。合成データを用いたインストラクションチューニングデータ作成の勘所1.データ要件を詰める教師データを作成するにあたって、質(正確性や一貫性)と多様性(どれだけ多様なシナリオや条件をカバーしているか)を担保することは非常に重要です。そのため、合成データを作成する前に、目的に合わせて「どのようなデータが必要か」 = 「LLMにどんな振る舞いをして欲しいか」を明確にする必要があります。例えば、LLMに「Rというプログラミング言語に関する質問にきちんと回答させたい」とします。この時タスクの種類として、以下のよう3つの分類を考えることができます。コードの説明コードの修正コードの生成さらに、具体的に「統計解析に関する質問の回答精度を上げたい」という要件が見つかったのであれば、例えば以下の9個のようにテーマを細分化できます。平均、分散、標準偏差(mean()、var()、sd()など) 中央値、最頻値(median()、Mode()など)要約統計量(summary())仮説検定(t検定、カイ二乗検定、ANOVAなど)信頼区間推定確率分布の利用(dnorm()、pbinom() など)単回帰・重回帰(lm()による線形回帰モデル)一般化線形モデル(ロジスティック回帰、ポアソン回帰など)混合効果モデル(ランダム効果を含むモデル)この時点で、タスクの種類とコードのテーマで3x9=27個の組み合わせが考えられます。このように、要件を細分化していくことで、合成データの多様性を担保することができます。また、後述しますが、利用できる合成用LLMの性能が高くない場合はこのような細分化は合成データの質を高めることにもつながります。※ 実際にRの合成データを作成したわけではなく、あくまで例になります。2.合成データは複数ステップで生成する2-1.論文のプロンプトでは質が不十分合成データを生成するための工夫はさまざまな論文があり、プログラミングの性能を上げるための論文には以下のようなものがあります。%3Cdl%20class%3D%22sankou%22%3E%0A%3Cdt%3E%E8%AB%96%E6%96%87%3C%2Fdt%3E%0A%3Cdd%3E%3Ca%20href%3D%22https%3A%2F%2Farxiv.org%2Fabs%2F2306.08568%22%20target%3D%22_parent%22%3EWizardCoder%3A%20Empowering%20Code%20LLMs%20with%20Evol-Instruct%3C%2Fa%3E%3C%2Fdd%3E%0A%3C%2Fdl%3E%0A%3Cdl%20class%3D%22sankou%22%3E%0A%3Cdt%3E%E8%AB%96%E6%96%87%3C%2Fdt%3E%0A%3Cdd%3E%3Ca%20href%3D%22https%3A%2F%2Farxiv.org%2Fabs%2F2312.02120%22%20target%3D%22_parent%22%3EMagicoder%3A%20Empowering%20Code%20Generation%20with%20OSS-Instruct%3C%2Fa%3E%3C%2Fdd%3E%0A%3C%2Fdl%3E%0A%3Cstyle%3E%0A.sankou%20%7B%0Aborder-top%3A%201px%20solid%20%23E5E5E5%3B%0Aborder-bottom%3A%201px%20solid%20%23E5E5E5%3B%0Apadding%3A%2040px%200%3B%0Amargin%3A%2040px%200%200%3B%0Adisplay%3A%20flex%3B%0Aalign-items%3A%20flex-start%3B%0A%7D%0A%0A.sankou%20dt%20%7B%0Afont-size%3A%2014px%3B%0Afont-weight%3A%20bold%3B%0Acolor%3A%20%23535FFF%3B%0Aborder%3A%201px%20solid%20%23535FFF%3B%0Aborder-radius%3A%204px%3B%0Apadding%3A%206px%2016px%3B%0Awidth%3A%2076px%3B%0A%7D%0A%0A.sankou%20dd%20%7B%0Apadding-left%3A%2020px%3B%0Amargin%3A%200%3B%0A%7D%0A%0A.sankou%20dd%20a%20%7B%0Acolor%3A%20%23333%3B%0Atext-decoration%3A%20underline%3B%0A%7D%0A%0A.sankou%20dd%20a%3Ahover%20%7B%0Atext-decoration%3A%20none%3B%0A%7D%0A%0A.sankou%20%2B%20.sankou%20%7B%0Aborder-top%3A%20none%3B%0Amargin-top%3A%200%3B%0A%7D%0A%0A.sankou%3Alast-child%20%7B%0Amargin-bottom%3A%2040px%3B%0A%7D%0A%40media%20(max-width%3A680px)%20%7B%0A.sankou%20%7B%0Apadding%3A%2025px%200%3B%0Adisplay%3A%20block%3B%0A%7D%0A%0A.sankou%20dt%20%7B%0Adisplay%3A%20table%3B%0Amargin-bottom%3A%2010px%3B%0Awidth%3A%20auto%3B%0Apadding%3A%202px%2012px%3B%0A%7D%0A%0A.sankou%20dd%20%7B%0Apadding-left%3A%200%3B%0A%7D%0A%7D%0A%3C%2Fstyle%3Eこれらの論文の中では、どのようなプロンプトを使ってデータを生成したかが記載されておりその考え方は非常に参考になります。ただ、論文中のプロンプトがそのまま使えるわけではありません。例えば、OSS-Instructで使用されるのは次のようなプロンプトです以下のランダムなコードスニペットからインスピレーションを得て、高品質なプログラミング問題を作成してください。結果は次の2つのセクションに分けて提示してください:- [Problem Description]- [Solution]。コードスニペット:{ここにコードスニペットを挿入}各セクションのガイドライン:1. [Problem Description]: hogehoge2. [Solution]: fugafugaこのプロンプトでは、何らかのコードスニペットから問題と回答を同時に生成するように指示していますが、実際使ってみるとあまり質の高いデータは生成できませんでした。これは、プロンプトがモデルに依存することや、使用したモデルの性能が十分ではないことが大きな原因と考えています。2-2. 生成ステップを分割して質を高めるそこで、問題と回答の質を高めるために以下のような工夫をしました。%3Cul%20class%3D%22unorderedList%20unorderedList1%22%3E%0A%3Cli%3E%3Ci%20class%3D%22fa-solid%20fa-1%22%3E%3C%2Fi%3E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E3%81%AE%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%8F%E7%B4%84%E3%82%92%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AB%E8%BF%BD%E5%8A%A0%3C%2Fli%3E%0A%3Cli%3E%3Ci%20class%3D%22fa-solid%20fa-2%22%3E%3C%2Fi%3E%E3%81%A9%E3%82%93%E3%81%AA%E5%95%8F%E9%A1%8C%2F%E5%9B%9E%E7%AD%94%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%B9%E3%81%8D%E3%81%8B%E3%81%A8%E3%81%84%E3%81%86%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E6%8C%87%E7%A4%BA%E3%81%AE%E8%BF%BD%E5%8A%A0%0A%3C%2Fli%3E%0A%E4%BE%8B%3A%20%E5%95%8F%E9%A1%8C%2F%E5%9B%9E%E7%AD%94%E3%81%AE%E5%BD%A2%E5%BC%8F%E3%80%81%E5%95%8F%E9%A1%8C%2F%E5%9B%9E%E7%AD%94%E3%81%AE%E4%BD%9C%E6%88%90%E3%83%AB%E3%83%BC%E3%83%AB%E3%80%81%E3%81%AA%E3%81%A9%0A%3Cli%3E%3Ci%20class%3D%22fa-solid%20fa-3%22%3E%3C%2Fi%3Efew-shot%E3%81%A7%E4%BE%8B%E3%81%AE%E8%BF%BD%E5%8A%A0%3C%2Fli%3E%0A%3Cli%3E%3Ci%20class%3D%22fa-solid%20fa-4%22%3E%3C%2Fi%3E%E5%95%8F%E9%A1%8C%E3%81%A8%E5%9B%9E%E7%AD%94%E3%82%92%E5%88%86%E3%81%91%E3%81%A6%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%3C%2Fli%3E%0A%3C%2Ful%3E%0A%3Cstyle%3E%0A.unorderedList%20%7B%0Amargin%3A%200%3B%0Apadding%3A%200%3B%0A%7D%0A.unorderedList%20li%7B%0Alist-style%3A%20none%3B%0Amargin%3A%2010px%200%3B%0A%7D%0A.unorderedList%20li%20i%7B%0Amargin-right%3A%2010px%3B%0Acolor%3A%20%23fff%3B%0Abackground%3A%20rgba(63%2C%20169%2C%20245%2C%201)%3B%0Aborder-radius%3A%20100%25%3B%0Awidth%3A%2020px%3B%0Aheight%3A%2020px%3B%0Afont-size%3A%2010px%3B%0Aalign-content%3A%20center%3B%0Aalign-items%3A%20center%3B%0Adisplay%3A%20inline-flex%3B%0Ajustify-content%3A%20center%3B%0Aposition%3A%20relative%3B%0Atop%3A%20-3px%3B%0A%7D%0A%3C%2Fstyle%3E%0A%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A%2F%2Fcdnjs.cloudflare.com%2Fajax%2Flibs%2Ffont-awesome%2F6.6.0%2Fcss%2Fall.min.css%22%20integrity%3D%22sha512-Kc323vGBEqzTmouAECnVceyQqyqdsSiqLQISBL29aUW4U%2FM7pSPA%2FgEUZQqv1cwx4OnYxTxve5UMg5GT6L4JJg%3D%3D%22%20crossorigin%3D%22anonymous%22%20referrerpolicy%3D%22no-referrer%22%20%2F%3E1〜3を実施するとプロンプトが非常に長くなり、指示内容も増えるため、合成用LLMの性能が低い場合は指示追従性が低下します。そのため、4のように問題と回答を分けて生成することで、生成の質を高めることができました。3. 詳細な要件が質の高いデータを生むそもそも、oss-instructは、データの多様性と質はコードスニペットの多様性と質に依存します。そのため、oss-instructのような手法では、超大規模にそれっぽい(質はそこまで求めない)データの生成には向くものの、特定のドメインやタスクに特化した質の高いデータを生成するには向いていないと考えています。しかし、詳細な要件を詰めているのであれば、コードスニペットなどに依存する必要はないはずです。そこで、詳細なテーマから問題の生成 → 回答の生成を行うことで、質が高く多様性も担保された合成データを効率よく生成することができました。例えば、コード生成タスクでは、最終的に以下のようなプロンプトを用意しました(簡略化しています)。【問題生成用プロンプト】あなたは優秀なエンジニアを採用するための、R言語のcoding interviewの問題を作成することに非常に長けています。以下のランダムな ## コードのテーマからインスピレーションを得て、質の高いconding interview用の問題を作成してください。問題は必ず以下の ## フォーマットに従って記述し、## 問題作成例を参考にしてください。## フォーマットに従う際には、必ず以下の## 出力ルールを忠実に守ってください。## コードのテーマ{ここにコードのテーマを挿入}## フォーマットここにフォーマットを記述## 問題作成例ここに問題作成例を記述## 出力ルールここに出力ルールを記述【回答生成用プロンプト】あなたは経験豊富なRエンジニアです。 与えられたRの## プログラミング問題を解いてください。あなたは## コード規約と## 回答ルールを忠実に守り、質の高い回答を提供することを期待されています。あなたの回答は、必ず以下の## 回答フォーマットに従う必要があります。## プログラミング問題{ここに生成したプログラミング問題を挿入}## コード規約ここにコード規約を記述## 回答ルールここに回答ルールを記述## 回答フォーマットここに回答フォーマットを記述最終的には、「生成された問題」と「生成された回答」をペアにしてデータセットにします。4. 重複を排除するテーマから合成データを生成できるようになったので、コードスニペットを集める必要がなくなり、非常に効率よく合成データを生成できるようになりました。1度に1000件を生成することも可能ですが、ここで注意しなければならないのが、類似データが生成されることです。例えば、同一タスク同一テーマに対してデータを生成した時に、すでによく似たデータを生成している可能性があります。このような類似データは、LLMの性能を上げるためにはあまり役に立たないため、類似チェックをして排除する必要があります。類似度を測る方法にはいくつかありますが、今回はROUGE-Lを用いました。生成された問題に対して、同じプロンプト(同一タスク同一テーマ)で生成されたすべての問題とROUGE-Lスコアを計算し、閾値を超えた場合にはスキップするというやり方を取りました。なお、場合によっては、同じような問題でも異なる回答がありうる場合があるため、問題ではなく回答に対してROUGE-Lスコアを計算しても良いかもしれません。また、Embeddingモデルを用いてコサイン類似度を計算する方法もありますが、類似度がかなり高く出てしまい、閾値の調整が難しかったため採用しませんでした。Embeddingモデルで得られるベクトルは、言語という大きなベクトル空間の中での1点を表現するため、今回のように同じタスクで同じテーマのデータを比較しても値がかなり近くなってしまうことが原因ではないかと思います。類似度の計算方法については、データの特徴によって適切な方法は異なると思いますので、実際に試してみてください。今回は、ROUGE-Lでそれなりにうまくいっており手法の比較はあまりできなかったので、機を見て他の手法も試してみたいと思います。合成データ作成の勘所まとめ1. 合成用のLLMは高性能ではない合成データの生成に用いることのできるLLMは、最先端のLLMのような高性能ではないことがほとんどです。そのため、合成のためのプロンプトはできる限り具体的である方が良いです。この前提で、データの質と多様性を担保する必要があります。2. 要件を細分化して多様性を担保する要件を細分化していくことができれば、合成データの多様性を担保することができます。3. 細分化した要件でプロンプトを作成して質を担保する要件を細分化していれば、具体的なプロンプトを与えることができるため、合成データの質も高くなります。4. 粒度を細かく生成する一方、具体的な指示文は非常に長くなりがちで、それはLLMの指示追従性を低下させる要因となります。そのため、問題と回答を分けるように、粒度を細かくして生成することで、質の高い合成データを生成することができました。5. 重複を排除する同じようなプロンプトで生成されたデータは類似する可能性があります。このようなデータは類似チェックにより排除する必要があります。6. 有識者に確認してもらう本記事ではあまり触れませんでしたが、合成データの質を高めるためには、生成したデータを人間の有識者に確認してもらうことが最も重要です。ただ、合成データの質が低いとチェック/修正のコストが非常に大きくなるため、今回紹介したようなやり方で合成データの質を高めることも同様に重要になります。%3Cdiv%20class%3D%22ctwhite%22%3E%0A%09%3Cdiv%20class%3D%22ctwhite-content%22%3E%0A%09%09%3Ch3%3E%E7%94%9F%E6%88%90AI%E3%83%A2%E3%83%87%E3%83%AB%E9%96%8B%E7%99%BA%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E8%AA%B2%E9%A1%8C%E3%82%92%E8%A7%A3%E6%B1%BA%E3%81%99%E3%82%8B%EF%BC%81FastLabel%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%3C%2Fh3%3E%0A%09%09%3Cdiv%20class%3D%22ctwhite-content-main%22%3E%0A%09%09%09%3Cdiv%20class%3D%22ctwhite-content-left%22%3E%0A%09%09%09%09%3Cp%3E%E7%94%9F%E6%88%90AI%E3%83%A2%E3%83%87%E3%83%AB%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%AF%E3%80%81%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%B9%E6%9C%89%E3%81%AE%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%B3%E3%82%B9%E3%82%84%E6%96%87%E5%8C%96%E7%9A%84%E8%83%8C%E6%99%AF%E3%82%92%E5%8F%8D%E6%98%A0%E3%81%97%E3%81%9F%E9%AB%98%E5%93%81%E8%B3%AA%E3%81%AA%E5%AD%A6%E7%BF%92%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E4%B8%8D%E8%B6%B3%E3%82%84%E3%80%81%E5%B0%82%E9%96%80%E6%80%A7%E3%81%AE%E9%AB%98%E3%81%84%E5%88%86%E9%87%8E%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%8F%8E%E9%9B%86%E3%82%84%E4%BD%9C%E6%88%90%E3%81%8C%E5%9B%B0%E9%9B%A3%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E9%AB%98%E7%B2%BE%E5%BA%A6%E3%81%AA%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E5%AE%9F%E7%8F%BE%E3%82%92%E5%A6%A8%E3%81%92%E3%82%8B%E8%A6%81%E5%9B%A0%E3%81%AE%E3%81%B2%E3%81%A8%E3%81%A4%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%3Cbr%3E%3Cbr%3E%0AFastLabel%E3%81%AF%E3%81%93%E3%81%86%E3%81%97%E3%81%9F%E8%AA%B2%E9%A1%8C%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%0A%3C%2Fp%3E%0A%09%09%09%09%3Cul%3E%3Cli%3E%E5%B0%82%E9%96%80%E6%80%A7%E3%81%AE%E9%AB%98%E3%81%84%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E4%BD%9C%E6%88%90%3C%2Fli%3E%0A%3Cli%3E%E7%89%B9%E5%AE%9A%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%BB%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%90%91%E3%81%91%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%B3%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%3C%2Fli%3E%0A%09%09%09%09%3C%2Ful%3E%0A%3Cp%3E%E3%81%A8%E3%81%84%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E3%81%94%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%3Cbr%3E%3Cbr%3E%0A%3Cstrong%3E%E6%A5%AD%E7%95%8C%E7%9F%A5%E8%AD%98%E3%82%92%E6%8C%81%E3%81%A4%E5%B0%82%E9%96%80%E4%BA%BA%E6%9D%90%E3%82%92%E3%82%A2%E3%82%B5%E3%82%A4%E3%83%B3%E3%81%97%E3%81%9F%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E4%BD%93%E5%88%B6%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%97%E3%80%81%E5%B0%82%E9%96%80%E6%80%A7%E3%81%AE%E9%AB%98%E3%81%84%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%8C%E5%8F%AF%E8%83%BD%3C%2Fstrong%3E%E3%81%A7%E3%81%99%E3%80%82%E3%81%BE%E3%81%9F%E3%80%81%E6%9C%AC%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%94%E7%B4%B9%E4%BB%8B%E3%81%97%E3%81%9F%E3%82%88%E3%81%86%E3%81%AB%E3%80%81%E5%90%88%E6%88%90%E7%94%A8LLM%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E8%B3%AA%E3%81%AE%E9%AB%98%E3%81%84%E5%90%88%E6%88%90%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8A%B9%E7%8E%87%E7%9A%84%E3%81%AB%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E5%8F%96%E3%82%8A%E7%B5%84%E3%81%BF%E3%82%82%E5%AE%9F%E6%96%BD%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%3Cbr%3E%3Cbr%3E%0A%E7%94%9F%E6%88%90AI%E3%83%A2%E3%83%87%E3%83%AB%E9%96%8B%E7%99%BA%E3%83%BB%E7%B2%BE%E5%BA%A6%E6%94%B9%E5%96%84%E3%82%92%E9%80%B2%E3%82%81%E3%82%8B%E4%B8%AD%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E9%A0%98%E5%9F%9F%E3%81%A7%E3%81%8A%E5%9B%B0%E3%82%8A%E3%81%94%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81%E3%81%9C%E3%81%B2%E3%81%94%E7%9B%B8%E8%AB%87%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%0A%3C%2Fp%3E%0A%09%09%09%3C%2Fdiv%3E%0A%09%09%3C%2Fdiv%3E%0A%09%09%3Cdiv%20class%3D%22sd%20appear%20button-container%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Ffastlabel.ai%2Fresources%2Fpamphlet-all-info%3Fid%3Dcta-blg-btn-btm-ado%22%20class%3D%22ctwhite-button%22%20id%3D%22cta-blg-btn-btm-ado%22%20target%3D%22_parent%22%3E%E3%81%BE%E3%81%9A%E3%81%AF%E8%B3%87%E6%96%99%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%3C%2Fa%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%09%3C%2Fdiv%3E%0A%3C%2Fdiv%3E%0A%0A%3Cstyle%3E%0A%09body%20%7B%0A%09%09font-family%3A%20-apple-system%2C%20%22Hiragino%20Sans%22%2C%20%22Yu%20Gothic%22%2C%20sans-serif%3B%0A%09%09font-weight%3A%20normal%3B%0A%09%7D%0A%0A%09.ctwhite%20%7B%0A%09%09align-content%3A%20flex-start%3B%0A%09%09align-items%3A%20flex-start%3B%0A%09%09background%3A%20%23FFFFFF%3B%0A%09%09border-radius%3A%2016px%3B%0A%09%09box-shadow%3A%200px%202px%2015px%20rgba(123%2C%20157%2C%20190%2C%200.15)%3B%0A%09%09flex%3A%20none%3B%0A%09%09flex-direction%3A%20column%3B%0A%09%09flex-wrap%3A%20nowrap%3B%0A%09%09height%3A%20auto%3B%0A%09%09justify-content%3A%20flex-start%3B%0A%09%09margin%3A%200px%20auto%3B%0A%09%09padding%3A%2030px%2030px%2030px%2030px%3B%0A%09%09width%3A%20100%25%3B%0A%09%09max-width%3A%20calc(100%25%20-%2010px)%3B%0A%09%09box-sizing%3A%20border-box%3B%0A%09%09margin-bottom%3A%2010px%3B%0A%09%09margin-top%3A%2010px%3B%0A%09%7D%0A%0A%09.ctwhite%20h3%20%7B%0A%09%09color%3A%20%23535fff%3B%0A%09%09font-size%3A%2026px%3B%0A%09%09font-weight%3A%20600%3B%0A%09%09height%3A%20auto%3B%0A%09%09line-height%3A%201.4%3B%0A%09%09padding%3A%200px%3B%0A%09%09text-align%3A%20center%3B%0A%09%09width%3A%20100%25%3B%0A%09%09padding-bottom%3A%2020px%3B%0A%09%09margin-bottom%3A%2020px%3B%0A%09%09position%3A%20relative%3B%0A%09%09margin-top%3A%200px%3B%0A%09%7D%0A%0A%09.ctwhite%20h3%3Aafter%20%7B%0A%09%09width%3A%2030px%3B%0A%09%09height%3A%202px%3B%0A%09%09content%3A%20%22%22%3B%0A%09%09display%3A%20block%3B%0A%09%09background%3A%20%23535fff%3B%0A%09%09position%3A%20absolute%3B%0A%09%09bottom%3A%200%3B%0A%09%09left%3A%2050%25%3B%0A%09%09transform%3A%20translateX(-50%25)%3B%0A%09%7D%0A%0A%09.ctwhite-content-main%20%7B%0A%09%09display%3A%20flex%3B%0A%09%09height%3A%20auto%3B%0A%09%09justify-content%3A%20flex-start%3B%0A%09%09margin%3A%200px%200px%200px%200px%3B%0A%09%09padding%3A%200px%3B%0A%09%09width%3A%20100%25%3B%0A%09%7D%0A%0A%09.ctwhite-content-left%20%7B%0A%09%09color%3A%20%23333%3B%0A%09%09flex%3A%201%3B%0A%09%09font-size%3A%2016px%3B%0A%09%09font-weight%3A%20400%3B%0A%09%09height%3A%20auto%3B%0A%09%09line-height%3A%201.4%3B%0A%09%09padding%3A%200px%200px%200px%3B%0A%09%09text-align%3A%20left%3B%0A%09%09width%3A%20auto%3B%0A%09%09max-width%3A%20100%25%3B%0A%09%09margin-right%3A%2020px%3B%0A%09%7D%0A%0A%20%20%20%20.ctwhite-content-left%20p%20%7B%0A%20%20%20%20%20%20%20%20line-height%3A%201.8%3B%0A%20%20%20%20%7D%0A%0A%09.ctwhite-content-left%20ul%20%7B%0A%09%09list-style%3A%20none%3B%0A%09%09padding%3A%200%3B%0A%09%09font-weight%3A%20600%3B%0A%09%09position%3A%20relative%3B%0A%09%09z-index%3A%202%3B%0A%09%09margin-left%3A%2020px%3B%0A%09%7D%0A%0A%09.ctwhite-content-left%20ul%20li%20%7B%0A%09%09padding-left%3A%2025px%3B%0A%09%09position%3A%20relative%3B%0A%09%09margin-bottom%3A%2010px%3B%0A%09%7D%0A%0A%09.ctwhite-content-left%20p%20%7B%0A%09%09margin-top%3A%200px%3B%0A%09%7D%0A%0A%09.ctwhite-content-left%20ul%20li%3A%3Abefore%20%7B%0A%09%09content%3A%20''%3B%0A%09%09background%3A%20%23535fff%3B%0A%09%09width%3A%206px%3B%0A%09%09height%3A%206px%3B%0A%09%09border-radius%3A%2050%25%3B%0A%09%09position%3A%20absolute%3B%0A%09%09left%3A%200%3B%0A%09%09top%3A%2050%25%3B%0A%09%09transform%3A%20translateY(-50%25)%3B%0A%09%7D%0A%0A%09.ctwhite-content-right%20img%20%7B%0A%09%09flex%3A%20none%3B%0A%09%09height%3A%20auto%3B%0A%09%09width%3A%20280px%3B%0A%09%09max-width%3A%20100%25%3B%0A%09%7D%0A%0A%09.ctwhite-button%20%7B%0A%20%20%20%20%20%20%20%20text-decoration%3A%20none%3B%0A%20%20%20%20%20%20%20%20font-weight%3A%20700%20!important%3B%0A%09%09background%3A%20linear-gradient(var(--g-angle)%2C%20var(--g-color-0)%20var(--g-position-0)%2C%20var(--g-color-1)%20var(--g-position-1))%3B%0A%09%09border-radius%3A%20100px%3B%0A%09%09box-shadow%3A%200px%200px%200px%200px%20rgba(0%2C%200%2C%200%2C%200.2)%3B%0A%09%09color%3A%20%23333%3B%0A%09%09flex%3A%20none%3B%0A%09%09font-family%3A%20var(--s-font-76953810)%3B%0A%09%09font-size%3A%2015px%3B%0A%09%09font-weight%3A%20400%3B%0A%09%09height%3A%2060px%3B%0A%09%09justify-content%3A%20center%3B%0A%09%09letter-spacing%3A%200em%3B%0A%09%09line-height%3A%201.4%3B%0A%09%09margin%3A%200px%200px%200px%200px%3B%0A%09%09opacity%3A%201%3B%0A%09%09padding%3A%2020px%2025px%2020px%2025px%3B%0A%09%09text-align%3A%20left%3B%0A%09%09width%3A%20auto%3B%0A%09%09max-width%3A%20100%25%3B%0A%09%09--g-color-0%3A%20%233fa9f5%3B%0A%09%09--g-position-0%3A%200%25%3B%0A%09%09--g-color-1%3A%20%23535fff%3B%0A%09%09--g-position-1%3A%20100%25%3B%0A%09%09--g-color-2%3A%20%23535fff%3B%0A%09%09--g-position-2%3A%20100%25%3B%0A%09%09--g-color-3%3A%20%23535fff%3B%0A%09%09--g-position-3%3A%20100%25%3B%0A%09%09--g-color-4%3A%20%23535fff%3B%0A%09%09--g-position-4%3A%20100%25%3B%0A%09%09--g-color-5%3A%20%23535fff%3B%0A%09%09--g-position-5%3A%20100%25%3B%0A%09%09--g-color-6%3A%20%23535fff%3B%0A%09%09--g-position-6%3A%20100%25%3B%0A%09%09--g-color-7%3A%20%23535fff%3B%0A%09%09--g-position-7%3A%20100%25%3B%0A%09%09--g-color-8%3A%20%23535fff%3B%0A%09%09--g-position-8%3A%20100%25%3B%0A%09%09--g-color-9%3A%20%23535fff%3B%0A%09%09--g-position-9%3A%20100%25%3B%0A%09%09--g-color-10%3A%20%23535fff%3B%0A%09%09--g-position-10%3A%20100%25%3B%0A%09%09--g-color-11%3A%20%23535fff%3B%0A%09%09--g-position-11%3A%20100%25%3B%0A%09%09--g-angle%3A%2090deg%3B%0A%09%09font-size%3A%2018px%3B%0A%09%09font-weight%3A%20500%3B%0A%09%09letter-spacing%3A%200em%3B%0A%09%09color%3A%20%23fff%3B%0A%09%09text-align%3A%20center%3B%0A%09%09margin%3A%200%20auto%3B%0A%09%09border%3A%20none%20!important%3B%0A%09%09transition%3A%20all%200.3s%20ease%3B%0A%09%09cursor%3A%20pointer%3B%0A%09%7D%0A%0A%09.ctwhite-button%3Ahover%20%7B%0A%09%09opacity%3A%200.8%3B%0A%09%7D%0A%0A%09.button-container%20%7B%0A%09%09text-align%3A%20center%3B%0A%09%09margin-top%3A%2025px%3B%0A%09%7D%0A%0A%09%40media%20(max-width%3A%20560px)%20%7B%0A%09%09h3%20%7B%0A%09%09%09font-size%3A%2022px%3B%0A%09%09%7D%0A%0A%09%09.ctwhite-content-main%20%7B%0A%09%09%09display%3A%20block%3B%0A%09%09%7D%0A%0A%09%09.ctwhite%20%7B%0A%09%09%09padding%3A%2015px%3B%0A%09%09%7D%0A%0A%09%09.ctwhite-content-left%20%7B%0A%09%09%09margin-right%3A%200px%3B%0A%09%09%7D%0A%0A%09%09.ctwhite-content-right%20img%20%7B%0A%09%09%09width%3A%20100%25%3B%0A%09%09%09max-width%3A%20350px%3B%0A%09%09%09display%3A%20block%3B%0A%09%09%09margin%3A%200%20auto%3B%0A%09%09%7D%0A%09%7D%0A.ctwhite-content%3Abefore%20%7B%0A%20%20%20%20%20%20%20%20content%3A%20%22%22%3B%0A%20%20%20%20%20%20%20%20height%3A%20100%25%3B%0A%20%20%20%20%20%20%20%20left%3A%200%3B%0A%20%20%20%20%20%20%20%20pointer-events%3A%20none%3B%0A%20%20%20%20%20%20%20%20position%3A%20absolute%3B%0A%20%20%20%20%20%20%20%20top%3A%200%3B%0A%20%20%20%20%20%20%20%20transition%3A%20inherit%3B%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0A%20%20%20%20%20%20%20%20background-image%3A%20url(https%3A%2F%2Fstorage.googleapis.com%2Fstudio-design-asset-files%2Fprojects%2FrROnAGzBWA%2Fs-800x173_v-fs_webp_c7b20c52-49c6-4394-aeba-23700cb24ea7.webp)%3B%0A%20%20%20%20%20%20%20%20background-position%3A%20center%20bottom%3B%0A%20%20%20%20%20%20%20%20background-repeat%3A%20no-repeat%3B%0A%20%20%20%20%20%20%20%20background-size%3A%20100%25%3B%0A%20%20%20%20%7D%0A.ctwhite-content%20%7B%0A%20%20%20%20position%3A%20relative%3B%0A%7D%0A.ctwhite-content%20.button-container%2C%0A.ctwhite-content-main%20%7B%0A%20%20position%3A%20relative%3B%0A%7D%0A.button-container%20%7B%0A%20%20%20%20margin-top%3A%2010px%3B%0A%7D%0A.ctwhite-content%20.ctwhite-button%20%7B%0A%20%20%20%20display%3A%20table%3B%0A%20%20%20%20height%3A%20auto%3B%0A%20%20%20%20padding%3A%2017px%2025px%2018px%3B%0A%7D%0A.ctwhite%20%7B%0A%20%20%20%20font-family%3A%20%22Noto%20Sans%20JP%22%2C%20sans-serif%3B%0Aborder%3A%201px%20solid%20%233FA9F5%3B%0A%7D%0A.ctwhite%20h3%20%7B%0A%20%20%20%20padding-bottom%3A%2030px%3B%0A%20%20%20%20margin-bottom%3A%200%3B%0A%7D%0A.ctwhite%20h3%3Aafter%20%7B%0A%20%20%20%20content%3A%20none%3B%0A%7D%0A.ctwhite-content-main%20%7B%0A%20%20%20%20letter-spacing%3A%20.06em%3B%0A%7D%0A.ctwhite-content-left%20%7B%0A%20%20%20%20margin-right%3A%200%3B%0A%7D%0A.ctwhite-content-left%20ul%20%7B%0A%20%20%20%20margin-left%3A%200%3B%0A%7D%0A.ctwhite-content-left%20ul%20li%20%7B%0A%20%20%20%20padding-left%3A%200.8em%3B%0Amargin-bottom%3A5px%3B%0A%7D%0A.ctwhite-content-left%20p%20%7B%0A%20%20%20%20margin-bottom%3A%2020px%3B%0A%7D%0A.ctwhite-content-left%20ul%20li%3A%3Abefore%20%7B%0A%20%20%20%20background%3A%20%23333%3B%0A%7D%0A%40media%20(max-width%3A%20560px)%7B%0A.ctwhite%20%7B%0A%20%20%20%20padding%3A%2030px%2020px%3B%0A%7D%0A.ctwhite%20h3%20%7B%0Afont-size%3A20px%3B%0Atext-align%3Aleft%3B%0A%7D%0A.button-container%20%7B%0A%20%20%20%20margin-top%3A%2040px%3B%0A%7D%0A.ctwhite-content%20.ctwhite-button%20%7B%0A%20%20%20%20font-size%3A%2016px%3B%0A%7D%0A%7D%0A%3C%2Fstyle%3E