<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title><![CDATA[A Day in the Life - 日記]]></title>
        <description><![CDATA[Yuichi Tateno による、日々の日記など]]></description>
        <link>https://secon.dev</link>
        <generator>RSS for Node</generator>
        <lastBuildDate>Sat, 24 Oct 2026 06:01:17 GMT</lastBuildDate>
        <atom:link href="https://secon.dev/feed" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[多言語 Static Embedding モデル 'bekko-static-embedding-v1' を公開]]></title>
            <description><![CDATA[<p>多言語の Static Embedding モデル、<a href="https://huggingface.co/hotchpotch/bekko-static-embedding-v1">bekko-static-embedding-v1</a> を公開しました。Static Embedding の中では情報検索性能で SoTA で、多言語検索ではほかの多言語 Static Embedding を約11ポイント、英語検索でも英語専用の Static Embedding を約2ポイント上回ります。</p>
<p>Static Embedding は Transformer を使っておらず、トークンごとに決まったベクトルを持ち、文章のベクトルはその平均を取るだけです。GPU も不要で、multilingual-e5-small などのモデルと比べて <a href="https://huggingface.co/blog/static-embeddings">CPU で100〜400倍高速</a>に動かせます。</p>
<p>bekko-static-embedding-v1 では独自に学習した20万語彙の tokenizer を使い、40言語、約8.1億組のテキストペアを16,384のバッチサイズで対照学習しました。</p>
<p>Transformer モデルにもタスクによっては競争力がある性能です。MMTEB の検索タスクでは、12層の Transformer モデルである multilingual-e5-small との差が約1ポイントでした。</p>
<h2>性能比較</h2>
<h3>他の Static Embedding との比較</h3>
<p>bekko-static-embedding-v1 は、多言語検索と英語検索のどちらでも、比較した公開 Static Embedding をすべて上回りました。</p>
<ul>
<li><strong>多言語検索</strong>：MNanoBEIR（14言語×13タスク、nDCG@10 × 100）は43.76で、<a href="https://huggingface.co/sentence-transformers/static-similarity-mrl-multilingual-v1">static-similarity-mrl-multilingual-v1</a>（32.29）と <a href="https://huggingface.co/minishlab/potion-multilingual-128M">potion-multilingual-128M</a>（32.23）を約11ポイント上回りました。</li>
<li><strong>英語検索</strong>：NanoBEIR-en（13タスク）は53.71で、英語専用の <a href="https://huggingface.co/RikkaBotan/stable-static-embedding-fast-retrieval-mrl-en-v2">stable-static-embedding-fast-retrieval-mrl-en-v2</a>（以下 SST-v2、51.57）と <a href="https://huggingface.co/sentence-transformers/static-retrieval-mrl-en-v1">static-retrieval-mrl-en-v1</a>（50.35）を上回り、512次元に切り詰めても（52.82）両モデルより高いスコアです。</li>
<li><strong>MMTEB</strong>：131タスクの平均は50.18で、2つの多言語 Static Embedding より約3ポイント高く、Retrieval カテゴリでは8.75ポイントと12.10ポイントの差がつきました。</li>
<li><strong>マトリョーシカ次元</strong>：512次元に切り詰めても、検索スコア平均の低下は約0.9ポイントです。</li>
</ul>
<table>
<thead>
<tr>
<th>Static Embedding</th>
<th>言語</th>
<th>dims</th>
<th>NanoBEIR-en</th>
<th>MNanoBEIR</th>
<th>MMTEB Retrieval</th>
<th>MMTEB 平均</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://huggingface.co/hotchpotch/bekko-static-embedding-v1">bekko-static-embedding-v1</a></td>
<td>多言語</td>
<td>1024</td>
<td>53.71</td>
<td>43.76</td>
<td>49.96</td>
<td>50.18</td>
</tr>
<tr>
<td><a href="https://huggingface.co/sentence-transformers/static-similarity-mrl-multilingual-v1">static-similarity-mrl-multilingual-v1</a></td>
<td>多言語</td>
<td>1024</td>
<td>43.51</td>
<td>32.29</td>
<td>41.21</td>
<td>47.24</td>
</tr>
<tr>
<td><a href="https://huggingface.co/minishlab/potion-multilingual-128M">potion-multilingual-128M</a></td>
<td>多言語</td>
<td>256</td>
<td>37.07</td>
<td>32.23</td>
<td>37.86</td>
<td>47.23</td>
</tr>
<tr>
<td><a href="https://huggingface.co/sentence-transformers/static-retrieval-mrl-en-v1">static-retrieval-mrl-en-v1</a></td>
<td>英語</td>
<td>1024</td>
<td>50.35</td>
<td>未集計</td>
<td>未集計</td>
<td>未集計</td>
</tr>
<tr>
<td><a href="https://huggingface.co/RikkaBotan/stable-static-embedding-fast-retrieval-mrl-en-v2">SST-v2</a></td>
<td>英語</td>
<td>512</td>
<td>51.57</td>
<td>未集計</td>
<td>未集計</td>
<td>未集計</td>
</tr>
</tbody>
</table>
<p><em>表1：既存の Static Embedding との比較。
NanoBEIR-en は英語検索13タスク、MNanoBEIR は14言語の検索182タスク、MMTEB は分類なども含む131タスクの平均です。
検索列は上位10件の順位と関連度を測る nDCG@10 × 100、MMTEB は各タスクの主指標を100倍した値です。</em></p>
<h3>文脈ありモデルとの比較</h3>
<p>Transformer の層をまったく持たないモデルは、Transformer のエンコーダにどこまで近づけるのでしょうか。
比較対象には、小型の多言語検索モデルとしてよく使われる <a href="https://huggingface.co/intfloat/multilingual-e5-small">multilingual-e5-small</a>（12層、アクティブパラメータ2,160万）を選びました。</p>
<table>
<thead>
<tr>
<th>モデル</th>
<th align="right">Transformer 層</th>
<th align="right">アクティブパラメータ</th>
<th align="right">NanoBEIR-en</th>
<th align="right">MNanoBEIR</th>
<th align="right">MMTEB Retrieval</th>
<th align="right">MMTEB 平均</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>bekko-static-embedding-v1</strong></td>
<td align="right"><strong>0</strong></td>
<td align="right"><strong>0</strong></td>
<td align="right">53.71</td>
<td align="right">43.76</td>
<td align="right">49.96</td>
<td align="right">50.18</td>
</tr>
<tr>
<td>multilingual-e5-small</td>
<td align="right">12</td>
<td align="right">21.6M</td>
<td align="right">58.37</td>
<td align="right">51.17</td>
<td align="right">50.9</td>
<td align="right">56.4</td>
</tr>
<tr>
<td><a href="https://huggingface.co/hotchpotch/bekko-embedding-v1-a8m">bekko-embedding-v1-a8m</a></td>
<td align="right">4</td>
<td align="right">7.7M</td>
<td align="right"><strong>60.34</strong></td>
<td align="right"><strong>52.65</strong></td>
<td align="right"><strong>56.2</strong></td>
<td align="right"><strong>56.7</strong></td>
</tr>
</tbody>
</table>
<p><em>表2：文脈ありモデルとの比較。
NanoBEIR-en と MNanoBEIR は HAKARI-Bench の nDCG@10 × 100 です。
multilingual-e5-small と bekko-embedding-v1-a8m の MMTEB は、同じ131タスクと集計方法による <a href="https://huggingface.co/hotchpotch/bekko-embedding-v1-a8m">bekko-embedding-v1-a8m のモデルカード</a>の値です。
アクティブパラメータはトークン埋め込み表を除いた数です。</em></p>
<p>MMTEB の Retrieval では、Transformer の層を1つも動かさずに、multilingual-e5-small との差が約1ポイント（49.96と50.9）でした。
Nano dataset の検索や MMTEB 全体の平均ではまだ multilingual-e5-small の方が高く、MMTEB 平均の差の多くは BitextMining、Reranking、STS によるものです。</p>
<p>小さな Transformer を動かせる環境なら、自分が公開している <a href="https://huggingface.co/hotchpotch/bekko-embedding-v1-a8m">bekko-embedding-v1-a8m</a> は、アクティブパラメータ770万で表のすべての列で multilingual-e5-small を上回り、CPU でも動きます。
また検索では BM25 も強力なベースラインなので、後半で詳しく比較します。</p>
<blockquote>
<p>自分は bekko-static-embedding-v1 の作者で、評価に使った HAKARI-Bench の開発者でもあります。</p>
</blockquote>
<h2>Static Embedding の仕組み</h2>
<p><strong>静的埋め込み（Static Embedding）</strong> は、文章を <strong>tokenizer</strong> でトークンに分け、トークンごとに決まったベクトルを割り当てるモデルです。
文章のベクトル化は、表から各トークンのベクトルを引いて平均を取るだけです。
Transformer の層を通す計算がないので、ベクトルを高速に作れます。</p>
<h2>Sentence Transformers での使い方</h2>
<p>モデルは Sentence Transformers からそのまま読み込めます。
次の例では、「寿司はおいしい」を英語、フランス語、スペイン語、中国語でベクトル化しています。</p>
<pre><code class="hljs language-python"><span class="hljs-keyword">from</span> sentence_transformers <span class="hljs-keyword">import</span> SentenceTransformer

model = SentenceTransformer(<span class="hljs-string">"hotchpotch/bekko-static-embedding-v1"</span>, device=<span class="hljs-string">"cpu"</span>)
vectors = model.encode(
    [
        <span class="hljs-string">"Sushi is delicious."</span>,
        <span class="hljs-string">"Les sushis sont délicieux."</span>,
        <span class="hljs-string">"El sushi es delicioso."</span>,
        <span class="hljs-string">"寿司很好吃。"</span>,
    ],
    normalize_embeddings=<span class="hljs-literal">True</span>,
)
<span class="hljs-built_in">print</span>(vectors.shape)  <span class="hljs-comment"># (4, 1024)</span>
<span class="hljs-built_in">print</span>(model.similarity(vectors, vectors))</code></pre>
<p>クエリと文書は同じ方法でベクトル化でき、<code>query:</code> や <code>passage:</code> のような接頭辞は不要です。
短いベクトルを使いたいときは、<code>truncate_dim</code>（32、64、128、256、512、1024）を指定します。</p>
<pre><code class="hljs language-python">compact = model.encode([<span class="hljs-string">"A short query"</span>], truncate_dim=<span class="hljs-number">512</span>, normalize_embeddings=<span class="hljs-literal">True</span>)</code></pre>
<h2>MMTEB での評価</h2>
<p>多言語での埋め込み性能を測る <strong>MMTEB（Massive Multilingual Text Embedding Benchmark）</strong> は、検索、文章分類、クラスタリング、文同士の意味的な近さを測る <strong>STS（Semantic Textual Similarity）</strong> などを含むベンチマークです。
今回は、その中の <code>MTEB(Multilingual, v2)</code> に含まれる131タスクで、出力を切り詰めない1024次元を評価しました。</p>
<p>比較対象は、Sentence Transformers の <a href="https://huggingface.co/sentence-transformers/static-similarity-mrl-multilingual-v1">static-similarity-mrl-multilingual-v1</a> と、Model2Vec 系の <a href="https://huggingface.co/minishlab/potion-multilingual-128M">potion-multilingual-128M</a> です。
比較モデルは公開されている評価結果を使い、同じ131タスクで平均を取りました。</p>
<table>
<thead>
<tr>
<th>カテゴリ</th>
<th>タスク数</th>
<th>bekko-static-embedding-v1</th>
<th>static-similarity-mrl-multilingual-v1</th>
<th>potion-multilingual-128M</th>
<th>差</th>
</tr>
</thead>
<tbody>
<tr>
<td>全タスク</td>
<td>131</td>
<td>50.18</td>
<td>47.24</td>
<td>47.23</td>
<td>+2.93</td>
</tr>
<tr>
<td>Classification</td>
<td>43</td>
<td>52.40</td>
<td>48.60</td>
<td>52.36</td>
<td>+3.81</td>
</tr>
<tr>
<td>Clustering</td>
<td>16</td>
<td>40.03</td>
<td>30.67</td>
<td>37.63</td>
<td>+9.36</td>
</tr>
<tr>
<td>MultilabelClassification</td>
<td>5</td>
<td>14.99</td>
<td>14.74</td>
<td>15.95</td>
<td>+0.25</td>
</tr>
<tr>
<td>Retrieval</td>
<td>18</td>
<td>49.96</td>
<td>41.21</td>
<td>37.86</td>
<td>+8.75</td>
</tr>
<tr>
<td>Reranking</td>
<td>6</td>
<td>51.59</td>
<td>49.45</td>
<td>47.39</td>
<td>+2.14</td>
</tr>
<tr>
<td>STS</td>
<td>16</td>
<td>64.50</td>
<td>64.02</td>
<td>61.23</td>
<td>+0.47</td>
</tr>
<tr>
<td>BitextMining</td>
<td>13</td>
<td>43.68</td>
<td>50.62</td>
<td>40.72</td>
<td>-6.94</td>
</tr>
<tr>
<td>PairClassification</td>
<td>11</td>
<td>72.81</td>
<td>74.34</td>
<td>71.39</td>
<td>-1.53</td>
</tr>
<tr>
<td>InstructionReranking</td>
<td>3</td>
<td>-1.65</td>
<td>-1.24</td>
<td>-2.08</td>
<td>-0.41</td>
</tr>
</tbody>
</table>
<p><em>表3：MMTEB の各タスクの主指標 × 100 を、カテゴリごとに平均した値です。
「差」は bekko-static-embedding-v1 − static-similarity-mrl-multilingual-v1 です。</em></p>
<p>全タスク平均は bekko-static-embedding-v1 が50.18で、static-similarity-mrl-multilingual-v1 の47.24、potion-multilingual-128M の47.23を約3ポイント上回りました。</p>
<p>比較した2モデルとの差がそろって大きいのは Retrieval です。
bekko-static-embedding-v1 は49.96で、static-similarity-mrl-multilingual-v1 を8.75ポイント、potion-multilingual-128M を12.10ポイント上回っています。
多言語の検索は、このモデルの強みです。</p>
<p>static-similarity-mrl-multilingual-v1 に対しては、9カテゴリ中6カテゴリで上回りました。
カテゴリ別の差が最も大きいのは Clustering の+9.36ポイントで、STS は+0.47ポイントとほぼ同等です。</p>
<p>一方、対訳文を探す BitextMining、文のペアを分類する PairClassification、指示付きの InstructionReranking では、static-similarity-mrl-multilingual-v1 の方が高くなりました。
特に BitextMining は43.68と50.62で、6.94ポイントの差があります。
対訳文の抽出や文ペアの分類が主な用途なら、static-similarity-mrl-multilingual-v1 も並べて試すとよいでしょう。</p>
<h2>HAKARI-Bench による英語検索の評価</h2>
<p>検索性能は、<a href="https://github.com/hakari-bench/hakari-bench">HAKARI-Bench</a> の Nano dataset で評価しました。
Nano dataset は、既存の検索ベンチマークを小さくした評価セットです。
以下の HAKARI-Bench の表は、nDCG@10 を100倍し、各タスクを等しい重みで平均した値です。</p>
<p>英語検索には、13タスクと合計649クエリからなる <strong>NanoBEIR-en</strong> を使いました。
比較する静的モデルは、英語検索用の <a href="https://huggingface.co/sentence-transformers/static-retrieval-mrl-en-v1">static-retrieval-mrl-en-v1</a> と <a href="https://huggingface.co/RikkaBotan/stable-static-embedding-fast-retrieval-mrl-en-v2">SST-v2</a> です。
文脈を使う <a href="https://huggingface.co/intfloat/multilingual-e5-small">multilingual-e5-small</a> と、自分が公開している文脈ありの小型モデル <a href="https://huggingface.co/hotchpotch/bekko-embedding-v1-a8m">bekko-embedding-v1-a8m</a>、単語の一致や出現頻度から順位を付ける <strong>BM25</strong> も、検索方式を選ぶための参考として並べます。</p>
<table>
<thead>
<tr>
<th>モデル</th>
<th>方式</th>
<th>出力次元</th>
<th>NanoBEIR-en</th>
</tr>
</thead>
<tbody>
<tr>
<td>bekko-static-embedding-v1</td>
<td>静的、多言語</td>
<td>1024</td>
<td>53.71</td>
</tr>
<tr>
<td>bekko-static-embedding-v1</td>
<td>静的、多言語</td>
<td>512</td>
<td>52.82</td>
</tr>
<tr>
<td>static-retrieval-mrl-en-v1</td>
<td>静的、英語検索</td>
<td>1024</td>
<td>50.35</td>
</tr>
<tr>
<td>SST-v2</td>
<td>静的、英語検索</td>
<td>512</td>
<td>51.57</td>
</tr>
<tr>
<td>potion-multilingual-128M</td>
<td>静的、多言語</td>
<td>256</td>
<td>37.07</td>
</tr>
<tr>
<td>multilingual-e5-small</td>
<td>文脈あり、多言語</td>
<td>384</td>
<td>58.37</td>
</tr>
<tr>
<td>bekko-embedding-v1-a8m</td>
<td>文脈あり、多言語</td>
<td>384</td>
<td>60.34</td>
</tr>
<tr>
<td>BM25</td>
<td>単語ベース</td>
<td>sparse</td>
<td>57.15</td>
</tr>
</tbody>
</table>
<p><em>表4：NanoBEIR-en のタスク平均。
bekko-static-embedding-v1 は1024次元と512次元、比較する埋め込みモデルは各モデルの標準出力次元です。</em></p>
<p>bekko-static-embedding-v1 の1024次元は53.71で、英語検索用の SST-v2（51.57）と static-retrieval-mrl-en-v1（50.35）を上回りました。
512次元でも、同じ出力次元の SST-v2 より1.25ポイント高く、13タスク中10タスクで上回っています。</p>
<p>ただし埋め込み表の大きさは異なり、bekko-static-embedding-v1 の約2.05億パラメータに対して、SST-v2 は約1,560万パラメータです。</p>
<p>英語検索だけで見れば、bekko-embedding-v1-a8m（60.34）、multilingual-e5-small（58.37）、BM25（57.15）の方が高いスコアで、Static Embedding との差はまだ残っています。</p>
<h2>多言語検索と BM25 の比較</h2>
<p>多言語検索では、static-similarity-mrl-multilingual-v1、potion-multilingual-128M、multilingual-e5-small、bekko-embedding-v1-a8m、BM25 と比較しました。
<strong>MNanoBEIR</strong> は14言語×13タスクの計182件です。
HAKARI-Bench ではこのほかにコード検索、長文検索、日本語検索なども含めた37ベンチマーク、550タスクを評価しており、ここではそのうち10ベンチマークを示します。</p>
<table>
<thead>
<tr>
<th>ベンチマーク</th>
<th>タスク数</th>
<th>bekko-static-embedding-v1（1024次元）</th>
<th>bekko-static-embedding-v1（512次元）</th>
<th>static-similarity-mrl-multilingual-v1</th>
<th>potion-multilingual-128M</th>
<th>multilingual-e5-small</th>
<th>bekko-embedding-v1-a8m</th>
<th>BM25</th>
</tr>
</thead>
<tbody>
<tr>
<td>MNanoBEIR</td>
<td>182</td>
<td>43.76</td>
<td>42.89</td>
<td>32.29</td>
<td>32.23</td>
<td>51.17</td>
<td>52.65</td>
<td>46.46</td>
</tr>
<tr>
<td>NanoMMTEB-v2</td>
<td>18</td>
<td>43.30</td>
<td>42.87</td>
<td>36.08</td>
<td>35.22</td>
<td>44.55</td>
<td>50.25</td>
<td>45.50</td>
</tr>
<tr>
<td>NanoMIRACL</td>
<td>18</td>
<td>68.03</td>
<td>67.67</td>
<td>45.37</td>
<td>47.79</td>
<td>78.71</td>
<td>75.57</td>
<td>57.15</td>
</tr>
<tr>
<td>NanoRTEB</td>
<td>14</td>
<td>37.50</td>
<td>36.53</td>
<td>25.73</td>
<td>25.58</td>
<td>47.11</td>
<td>54.98</td>
<td>35.53</td>
</tr>
<tr>
<td>NanoCoIR</td>
<td>10</td>
<td>58.19</td>
<td>57.55</td>
<td>48.01</td>
<td>45.38</td>
<td>69.15</td>
<td>74.68</td>
<td>54.36</td>
</tr>
<tr>
<td>NanoBRIGHT</td>
<td>20</td>
<td>26.38</td>
<td>26.31</td>
<td>20.27</td>
<td>19.67</td>
<td>17.58</td>
<td>31.49</td>
<td>27.90</td>
</tr>
<tr>
<td>NanoMLDR</td>
<td>13</td>
<td>55.72</td>
<td>54.55</td>
<td>35.96</td>
<td>34.89</td>
<td>39.20</td>
<td>54.48</td>
<td>73.96</td>
</tr>
<tr>
<td>NanoLongEmbed</td>
<td>6</td>
<td>61.96</td>
<td>60.58</td>
<td>48.90</td>
<td>43.90</td>
<td>50.14</td>
<td>68.19</td>
<td>82.17</td>
</tr>
<tr>
<td>NanoJMTEB-v2</td>
<td>11</td>
<td>65.36</td>
<td>64.40</td>
<td>51.37</td>
<td>51.61</td>
<td>71.65</td>
<td>75.93</td>
<td>74.65</td>
</tr>
<tr>
<td>NanoIndicQA</td>
<td>11</td>
<td>35.35</td>
<td>35.23</td>
<td>34.91</td>
<td>53.69</td>
<td>70.09</td>
<td>65.12</td>
<td>56.53</td>
</tr>
</tbody>
</table>
<p><em>表5：各ベンチマーク内のタスク平均、nDCG@10 × 100。
static-similarity-mrl-multilingual-v1 は1024次元、potion-multilingual-128M は256次元、multilingual-e5-small と bekko-embedding-v1-a8m は384次元です。
NanoMMTEB-v2 は HAKARI-Bench の検索用セットで、前述の分類なども含む MMTEB とは別の評価です。</em></p>
<p>static-similarity-mrl-multilingual-v1 に対して、bekko-static-embedding-v1 の1024次元は37ベンチマークすべての平均で上回りました。
タスク単位でも、550件中523件で上回り、27件で下回っています。</p>
<p>potion-multilingual-128M に対しては、37ベンチマーク中36の平均で上回り、タスク単位では550件中520件で上回りました。
例外は NanoIndicQA で、potion-multilingual-128M が53.69、bekko-static-embedding-v1 が35.35でした。</p>
<p>一方、文脈を使うモデルとの差はまだ残っています。
multilingual-e5-small は37ベンチマーク中28、bekko-embedding-v1-a8m は36の平均で bekko-static-embedding-v1 を上回り、MNanoBEIR ではそれぞれ51.17と52.65です。</p>
<p>長文検索の NanoMLDR と NanoLongEmbed では multilingual-e5-small を上回りましたが、これには multilingual-e5-small の入力上限が512トークンであることも影響しています。
入力上限が8192トークンの bekko-embedding-v1-a8m と比べると、NanoLongEmbed では bekko-embedding-v1-a8m が68.19と高く、NanoMLDR では bekko-static-embedding-v1 が55.72と54.48でわずかに上回りました。</p>
<h3>検索に Static Embedding を使うべきか</h3>
<p>検索だけが目的なら、BM25 で十分なことも多いでしょう。
今回の評価でも、BM25 は37ベンチマーク中21の平均で bekko-static-embedding-v1 を上回り、タスク単位では550件中342件で上回りました。
長文検索の NanoMLDR と NanoLongEmbed、日本語の NanoJMTEB-v2 では、BM25 が大きく上回っています。</p>
<p>一方、自然言語の質問から文書を探す NanoMIRACL では、bekko-static-embedding-v1 が68.03、BM25 が57.15で、Static Embedding の方が10.88ポイント高くなりました。
検索タスクによっては、Static Embedding の方が適しています。</p>
<p>BM25 は単語の一致で文書を探すため、質問と文書で言い回しが異なる場合には埋め込み検索が役立ちます。
どちらが適しているかは、実際の検索対象で両方を試してみるのが確実です。</p>
<h2>マトリョーシカ次元と INT8 の選択</h2>
<p>1024、512、256、128、64、32次元は、<strong>Matryoshka Representation Learning（MRL）</strong> でまとめて学習しました。
MRL は、ベクトルの先頭側に有用な情報を集め、先頭の一部だけを取り出しても使えるようにする学習方法です。
用途に合わせてベクトルの長さを選び、保存容量や検索時の計算量を減らせます。</p>
<p>重みの保存精度は、FP16 に加えて INT8 も用意しています。
ここでの INT8 はモデルの重みを8 bit整数にしたもので、出力ベクトルを整数にする操作とは別です。</p>
<table>
<thead>
<tr>
<th>次元</th>
<th>NanoBEIR-en FP16</th>
<th>NanoBEIR-en INT8</th>
<th>MNanoBEIR FP16</th>
<th>MNanoBEIR INT8</th>
<th>Overall FP16</th>
<th>Overall INT8</th>
</tr>
</thead>
<tbody>
<tr>
<td>1024</td>
<td>53.71</td>
<td>53.70</td>
<td>43.76</td>
<td>43.77</td>
<td>45.88</td>
<td>45.89</td>
</tr>
<tr>
<td>512</td>
<td>52.82</td>
<td>52.79</td>
<td>42.89</td>
<td>42.88</td>
<td>45.03</td>
<td>45.02</td>
</tr>
<tr>
<td>256</td>
<td>50.83</td>
<td>50.82</td>
<td>41.04</td>
<td>41.03</td>
<td>43.29</td>
<td>43.28</td>
</tr>
<tr>
<td>128</td>
<td>47.83</td>
<td>47.97</td>
<td>38.03</td>
<td>38.04</td>
<td>40.12</td>
<td>40.12</td>
</tr>
<tr>
<td>64</td>
<td>43.96</td>
<td>44.04</td>
<td>32.87</td>
<td>32.87</td>
<td>34.82</td>
<td>34.81</td>
</tr>
<tr>
<td>32</td>
<td>35.74</td>
<td>35.72</td>
<td>24.97</td>
<td>24.96</td>
<td>26.46</td>
<td>26.44</td>
</tr>
</tbody>
</table>
<p><em>表6：マトリョーシカ次元と重みの保存精度による検索スコア。
Overall は550タスク平均で、すべて nDCG@10 × 100です。
INT8 は ONNX の結果です。</em></p>
<p>1024次元から512次元にすると、ベクトルの長さは半分になり、検索スコアの低下は NanoBEIR-en と MNanoBEIR のどちらも約0.9ポイントでした。
256次元では、低下が2.88と2.72ポイントに広がります。
それでも MNanoBEIR では、128次元の38.03が1024次元の static-similarity-mrl-multilingual-v1（32.29）を上回ります。
INT8 と FP16 の差は、どの次元でも0.15ポイント未満でした。</p>
<p>自分なら、まず512次元から試し、メモリを抑えたいときは INT8 の512次元か256次元を選びます。</p>
<h3>使う次元の重みだけを読み込む</h3>
<p>Sentence Transformers の <code>truncate_dim</code> は出力ベクトルを切り詰めますが、読み込むのは全1024次元分の表です。
512次元や256次元しか使わないなら、そのぶんのメモリは無駄になります。</p>
<p>そこで、1つの次元の重みだけを持つ ONNX と OpenVINO のファイルもリポジトリに置いています。
<a href="https://huggingface.co/hotchpotch/bekko-static-embedding-v1#onnx-and-openvino-files">モデルカード</a>には、形式、次元数、保存精度を選んで読み込む小さな <code>get_model()</code> ヘルパーを載せています。</p>
<pre><code class="hljs language-python"><span class="hljs-keyword">from</span> transformers.dynamic_module_utils <span class="hljs-keyword">import</span> get_class_from_dynamic_module

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_model</span>(<span class="hljs-params">backend=<span class="hljs-string">"onnx"</span>, dim=<span class="hljs-number">512</span>, precision=<span class="hljs-string">"int8"</span>, revision=<span class="hljs-string">"main"</span></span>):</span>
    repo = <span class="hljs-string">"hotchpotch/bekko-static-embedding-v1"</span>
    ext = {<span class="hljs-string">"onnx"</span>: <span class="hljs-string">"onnx"</span>, <span class="hljs-string">"openvino"</span>: <span class="hljs-string">"xml"</span>}[backend]
    <span class="hljs-keyword">return</span> get_class_from_dynamic_module(
        <span class="hljs-string">"bekko_static_backend.BekkoStaticBackend"</span>, repo, revision=revision,
    ).load_sentence_transformer(
        repo, revision=revision, backend=backend,
        file_name=<span class="hljs-string">f"<span class="hljs-subst">{backend}</span>/model_<span class="hljs-subst">{precision}</span>_dim<span class="hljs-subst">{dim}</span>.<span class="hljs-subst">{ext}</span>"</span>,
    )

model = get_model(backend=<span class="hljs-string">"onnx"</span>, dim=<span class="hljs-number">512</span>, precision=<span class="hljs-string">"int8"</span>)</code></pre>
<table>
<thead>
<tr>
<th>次元</th>
<th>FP16 重み</th>
<th>INT8 重み</th>
</tr>
</thead>
<tbody>
<tr>
<td>1024</td>
<td>409.6 MB</td>
<td>205.6 MB</td>
</tr>
<tr>
<td>512</td>
<td>204.8 MB</td>
<td>103.2 MB</td>
</tr>
<tr>
<td>256</td>
<td>102.4 MB</td>
<td>52.0 MB</td>
</tr>
<tr>
<td>128</td>
<td>51.2 MB</td>
<td>26.4 MB</td>
</tr>
<tr>
<td>64</td>
<td>25.6 MB</td>
<td>13.6 MB</td>
</tr>
<tr>
<td>32</td>
<td>12.8 MB</td>
<td>7.2 MB</td>
</tr>
</tbody>
</table>
<p><em>表7：次元別に配布するモデルファイルのサイズ（10進の MB）。
ONNX と OpenVINO は同じサイズで、tokenizer（約5.1 MB）は含みません。</em></p>
<p>たとえば INT8 の512次元は103.2 MBで、FP16 の1024次元（409.6 MB）の約4分の1です。
256次元なら52.0 MBまで小さくなります。</p>
<h2>どのモデルを選ぶか</h2>
<p>今回の結果から、自分なら次のように選びます。</p>
<ul>
<li>多言語の埋め込みを軽い計算で作りたい場合は、bekko-static-embedding-v1 の512次元から試す。</li>
<li>検索だけが目的なら、対象言語に合った BM25 と並べて比較する。</li>
<li>対訳文の抽出や文ペアの分類が中心なら、static-similarity-mrl-multilingual-v1 も比較する。</li>
<li>検索精度を優先し、Transformer の計算を許容できるなら、multilingual-e5-small や bekko-embedding も候補に入れる。</li>
</ul>
<blockquote>
<p><a href="https://huggingface.co/hotchpotch/bekko-embedding-v1-a8m">bekko-embedding</a> は、bekko-static-embedding-v1 とは異なり、Transformer の attention で文脈を扱う埋め込みモデルです。
Transformer 部分の重みを小さくしており、たとえば bekko-embedding-v1-a8m は約770万のアクティブパラメータで、CPU でも推論できます。
今回の比較でも、bekko-embedding-v1-a8m は NanoBEIR-en が60.34、MNanoBEIR が52.65で、どちらも multilingual-e5-small より高いスコアでした。
検索性能と推論速度のバランスを重視したい場合は、bekko-embedding も検討するとよいでしょう。</p>
</blockquote>
<h2>学習の方法</h2>
<h3>独自 tokenizer の設計と比較</h3>
<p>Static Embedding では、tokenizer が作る単位が、そのまま平均するベクトルの単位になります。
そこで、多言語 BERT や Gemma 2 の既存語彙に加えて、学習データに合わせた語彙を試しました。
多言語の静的モデル <a href="https://huggingface.co/sentence-transformers/static-similarity-mrl-multilingual-v1">static-similarity-mrl-multilingual-v1</a> が使う <code>bert-base-multilingual-uncased</code> も比較対象にしています。</p>
<p>独自語彙の学習には、単語をさらに小さな断片に分けられる <strong>WordPiece</strong> を使いました。
まず、Wikipedia と FineWeb から同数ずつ文書を取り、英語の3万語彙を学習します。
次に、英語のトークンIDを保ったまま39言語分の語彙を追加し、全体を20万語彙にしました。</p>
<p>語彙の選択には、学習データの10%を使って各 tokenizer で学習した8モデルを比較しました。
評価は、多言語検索の MNanoBEIR（14言語×13タスク）と NanoMIRACL（18言語）の計200件です。
nDCG@10 を100倍し、200件を等しい重みで平均しています。</p>
<p>表の「uncased」は大文字と小文字を区別しない設定、「cased」は区別する設定です。
「script-balanced」は、文字体系ごとの偏りを調整した候補を指します。
語彙数の「k」は千を表し、たとえば「200k、英語30k」は全20万語彙のうち英語3万語彙を先に確保した構成です。</p>
<table>
<thead>
<tr>
<th>tokenizer</th>
<th>1024次元</th>
<th>512次元</th>
</tr>
</thead>
<tbody>
<tr>
<td>多言語 BERT uncased</td>
<td>37.87</td>
<td>37.17</td>
</tr>
<tr>
<td>多言語 BERT cased</td>
<td>38.51</td>
<td>38.01</td>
</tr>
<tr>
<td>Gemma 2</td>
<td>38.73</td>
<td>38.08</td>
</tr>
<tr>
<td>独自100k、英語24k、uncased</td>
<td>40.19</td>
<td>39.29</td>
</tr>
<tr>
<td>独自100k、英語30k、uncased</td>
<td>39.86</td>
<td>39.21</td>
</tr>
<tr>
<td>独自200k、英語30k、cased</td>
<td>41.60</td>
<td>40.69</td>
</tr>
<tr>
<td>独自200k、英語30k、script-balanced</td>
<td>41.20</td>
<td>40.40</td>
</tr>
<tr>
<td>独自200k、英語30k、uncased（採用）</td>
<td>41.89</td>
<td>41.18</td>
</tr>
</tbody>
</table>
<p><em>表8：tokenizer 別の検索スコア、nDCG@10 × 100。
8モデルは同じデータと学習設定で比較しました。
この10%実験では正式版とは異なる対照学習の損失を使っており、正式版モデルのスコアとは直接比較できません。</em></p>
<p>最も高かったのは、20万語彙、英語3万語彙の uncased 版でした。
1024次元の41.89は、多言語 BERT uncased の37.87、Gemma 2 の38.73を上回ります。
この結果から、正式版にも同じ tokenizer を採用しました。</p>
<h3>学習データとハイパーパラメータ</h3>
<p>モデルの学習には、<a href="https://huggingface.co/datasets/hotchpotch/bekko-embedding-v1-unsupervised">bekko-embedding の unsupervised データセット</a> を使いました。
元のデータは、<a href="https://arxiv.org/abs/2607.25180">Bekko Embedding 論文</a>で説明した多言語データです。</p>
<p>そのうち40言語を対象とする265のデータ構成から、約8.1億件のテキストペアを学習に使いました。</p>
<p>対象の40言語は、英語、アラビア語、ブルガリア語、ベンガル語、カタルーニャ語、チェコ語、デンマーク語、ドイツ語、ギリシャ語、スペイン語、エストニア語、ペルシア語、フィンランド語、フランス語、ヘブライ語、ヒンディー語、クロアチア語、ハンガリー語、インドネシア語、イタリア語、日本語、韓国語、オランダ語、ノルウェー語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、スロバキア語、スロベニア語、セルビア語、スウェーデン語、スワヒリ語、テルグ語、タイ語、トルコ語、ウクライナ語、ベトナム語、ヨルバ語、中国語です。</p>
<p>学習する組には、文書のタイトルと本文、質問と回答、検索向けに生成したクエリ、対訳ペアなどが含まれます。
対訳データは NLLB English HQ を残し、ほかの対訳系列を選択から外しました。
MIRACL の train split や NLI に由来するデータも含みます。</p>
<p>埋め込み表はランダムに初期化し、対応するテキストの組が近くなるように学習します。
損失には、同じバッチ内のほかの候補と区別する <strong>Multiple Negatives Ranking Loss（MNRL）</strong> を使い、全1024次元と各マトリョーシカ次元に適用しました。
教師モデルの出力ベクトルを模倣する蒸留は行っていません。</p>
<table>
<thead>
<tr>
<th>設定</th>
<th>値</th>
</tr>
</thead>
<tbody>
<tr>
<td>モデル</td>
<td>ランダム初期化した静的埋め込み表と平均プーリング</td>
</tr>
<tr>
<td>語彙数、埋め込み次元</td>
<td>200,000、1,024</td>
</tr>
<tr>
<td>埋め込み表のパラメータ数</td>
<td>204,800,000</td>
</tr>
<tr>
<td>データ</td>
<td>40言語を対象とする265構成、約8.14億行</td>
</tr>
<tr>
<td>損失</td>
<td>MNRL、温度0.03（scale = 1 / 0.03）</td>
</tr>
<tr>
<td>MRL 次元</td>
<td>32、64、128、256、512、1,024</td>
</tr>
<tr>
<td>MRL の重み</td>
<td>0.025、0.05、0.1、0.15、0.3、1.0（上の次元順）</td>
</tr>
<tr>
<td>エポック、更新回数</td>
<td>1、49,727</td>
</tr>
<tr>
<td>グローバルバッチサイズ</td>
<td>16,384</td>
</tr>
<tr>
<td>学習率</td>
<td>0.25</td>
</tr>
<tr>
<td>スケジュール</td>
<td>10% warmup と cosine decay</td>
</tr>
<tr>
<td>最適化</td>
<td>AdamW、weight decay 0、β₂ = 0.999、ε = 1e−8</td>
</tr>
<tr>
<td>学習精度</td>
<td>BF16 mixed precision、学習後のマスター重みは FP32</td>
</tr>
<tr>
<td>学習時の入力上限</td>
<td>512トークン</td>
</tr>
<tr>
<td>seed</td>
<td>42</td>
</tr>
<tr>
<td>データの取り出し</td>
<td>構成ごとの件数に比例したサンプリング、バッチ内の重複を抑制</td>
</tr>
</tbody>
</table>
<p><em>表9：正式モデルの学習設定。</em></p>
<h3>再現用スクリプト</h3>
<p>モデルのリポジトリには、<a href="https://huggingface.co/hotchpotch/bekko-static-embedding-v1/tree/main/training_scripts">tokenizer 学習、モデル学習、FP16 書き出しのスクリプト</a> を置いています。
学習設定とデータの選択設定も含めているので、データの選択から FP16 での書き出しまでを追えます。</p>
<h2>HAKARI-Bench の結果</h2>
<p>HAKARI-Bench の結果は、<a href="https://huggingface.co/spaces/hakari-bench/leaderboard#model_filter=multilingual-e5-small+bekko-embedding-v1-a8m+static">leaderboard</a> で確認できます。
リンク先では、<code>multilingual-e5-small</code>、<code>bekko-embedding-v1-a8m</code> と、名前に <code>static</code> を含むモデルを比較できます。</p>
<h2>参考文献と関連実装</h2>
<ul>
<li>Yuichi Tateno, <a href="https://arxiv.org/abs/2607.25180">Bekko Embedding: Parameter-Efficient Multilingual Retrieval with Ultra-Compact Encoders</a>, 2026。
学習データの背景となる、文脈付き Bekko Embedding の論文。</li>
<li>Yuichi Tateno, <a href="https://arxiv.org/abs/2606.22778">HAKARI-Bench: A Lightweight Benchmark for Comparing Retrieval Architectures and Efficiency Settings under Unified Conditions</a>, 2026。
検索方式や次元削減を比較する軽量評価の設計。</li>
<li>Kenneth Enevoldsen et al., <a href="https://arxiv.org/abs/2502.13595">MMTEB: Massive Multilingual Text Embedding Benchmark</a>, 2025。
多言語の分類、類似度、検索などを評価するベンチマーク。</li>
<li>Aditya Kusupati et al., <a href="https://arxiv.org/abs/2205.13147">Matryoshka Representation Learning</a>, 2022。
先頭の一部の次元でも使える表現を学習する方法。</li>
<li>Nandan Thakur et al., <a href="https://arxiv.org/abs/2104.08663">BEIR: A Heterogeneous Benchmark for Zero-shot Evaluation of Information Retrieval Models</a>, 2021。
異なる検索タスクと検索方式の比較。</li>
<li>Xinyu Zhang et al., <a href="https://arxiv.org/abs/2210.09984">Making a MIRACL: Multilingual Information Retrieval Across a Continuum of Languages</a>, 2023。
18言語の自然言語質問と関連文書の評価データ。</li>
<li>Stephan Tulkens and Thomas van Dongen, <a href="https://github.com/MinishLab/model2vec">Model2Vec: Fast State-of-the-Art Static Embeddings</a>, 2024。
Sentence Transformer から静的埋め込みを作るソフトウェアと技術解説。</li>
<li>Minish Lab, <a href="https://huggingface.co/minishlab/potion-multilingual-128M">potion-multilingual-128M</a>。
Model2Vec 系の多言語モデルと学習方法。</li>
<li>Tom Aarsen, <a href="https://huggingface.co/blog/static-embeddings">Train 400x faster Static Embedding Models with Sentence Transformers</a>。
静的モデルの学習方法と既存2モデルの解説。</li>
<li>RikkaBotan, <a href="https://huggingface.co/blog/RikkaBotan/stable-static-embedding-technical-report">Stable Static Embedding 技術レポート</a>と<a href="https://huggingface.co/blog/RikkaBotan/stable-static-embedding-v2-technical-report">SSE Retrieval MRL v2 技術レポート</a>。
静的な英語検索モデルの設計と評価。</li>
</ul>]]></description>
            <link>https://secon.dev/entry/2026/10/24/100000-bekko-static-embedding</link>
            <guid isPermaLink="false">/entry/2026/10/24/100000-bekko-static-embedding</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Sat, 24 Oct 2026 01:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月23日]]></title>
            <description><![CDATA[<p>最近よく見る YouTube は<a href="https://www.youtube.com/@waterramen">水ラーメン</a>氏のチャンネル。鮮魚スーパーで売っていた生き物を育てる動画から入ったんだけど、釣り・捕獲・無人島サバイバルと全編において高クオリティ、数百万再生の動画だらけ。解説の知識もすごく、体力と知力を感じられ、プロフェッショナルYouTuber感を感じる。</p>]]></description>
            <link>https://secon.dev/entry/2026/10/23/210000</link>
            <guid isPermaLink="false">/entry/2026/10/23/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Fri, 23 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月22日]]></title>
            <description><![CDATA[<p>世界脆弱デイ。周りは大変そうだった。今後も同じようなことが起きるんだろうなぁ。</p>]]></description>
            <link>https://secon.dev/entry/2026/10/22/210000</link>
            <guid isPermaLink="false">/entry/2026/10/22/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Thu, 22 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月21日]]></title>
            <description><![CDATA[<p>中国本土系中華(中国本土の色が強い中華屋)がリニューアルした那須街道沿いにある麻辣担屋、罐罐麻辣湯(カンカンマーラータン)でランチ。台湾で食べた火鍋が思い出される、懐かし〜。注文してから、ライス1杯無料ということに気付く、なら麺はもうちょっと少なくてもよかったかな。十分満足で、寒くなる冬シーズンは足繁く通うかもしれない。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261024_R0003693.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261024_R0003693.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/21/210000</link>
            <guid isPermaLink="false">/entry/2026/10/21/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Wed, 21 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月20日]]></title>
            <description><![CDATA[<p>昨日から体調が悪い感じで、大体寝ていた1日。推理小説を3冊ほど読む。</p>
<ul>
<li>森バジル: <a href="https://link.amazon/B0eTI86tP">ノウイットオール</a></li>
<li>森バジル: <a href="https://www.amazon.co.jp/dp/B0HLCHVZQB">なんで死体がスタジオに!?</a></li>
<li>夕木春央: <a href="https://link.amazon/B0h0boEw6">楽園</a></li>
</ul>
<p>ノウイットオールは高校生がM-1に挑戦する話があって、成瀬は天下を取りにいくでもM-1を狙うくだりがあったよなぁ。どちらもアツく語られていて面白かった。自分は M-1 をみたことがないのだが…。</p>
<p>夕木春央氏の楽園は、最近の2文字シリーズの3作目なのかな。以前の話とは違い、殺害される人は凶悪犯で、主人公は狙われない、という設定なので、ハラハラ感がなかったのだよなぁ。</p>]]></description>
            <link>https://secon.dev/entry/2026/10/20/210000</link>
            <guid isPermaLink="false">/entry/2026/10/20/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Tue, 20 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月19日]]></title>
            <description><![CDATA[<p>森バジル氏の新作ミステリ小説、<a href="https://link.amazon/B02dbRJW9">探偵小石は戻らない</a>を読む。物語は最終話から始まり、この後どんな結末が！？という所で、次は最終話-1, -2, -3... （時系列もその順）と戻っていく。よく最終話のようなシーンを見せた上で、「最初」からスタートはあるあるだが、-1 話づつ戻るの面白いなぁ。登場人物の説明もないので、そもそもこの人は誰？というわけで、どんな人なのかの説明もないので、それを考察する面白さも加わる。</p>
<p>前作の<a href="https://link.amazon/B0594MuvK">探偵小石は恋しない</a>、の続編は作るの難しそうだよなーと思っていたのだけど、期待を裏切る面白さだった。前作は今はKindle Unlimitedで配信中なので、未読の方はぜひ（前作も面白い）。</p>]]></description>
            <link>https://secon.dev/entry/2026/10/19/210000</link>
            <guid isPermaLink="false">/entry/2026/10/19/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Mon, 19 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月18日]]></title>
            <description><![CDATA[<p>鏡石町のPAから高速を降り、下道を走っていると、ふと岩瀬牧場の看板＆イベントをやってそうだったので、ぶらり立ち寄りすると、たまたまこども祭りの日だったようで。主目的をこちらに変更する。</p>
<p>ちびっこ相撲(強そうだったが、負けた子がワンワン泣いてかわいかった)、アンパンマン列車、巨大な空気滑り台、ハムスターレース、等々、子供にとって楽しそうなイベント。ベコ氏もアンパンマン列車に見て乗って大はしゃぎ。乗ると、認知できなくなくなるから、見ている方が楽しそうではあった。家族でのタンデム自転車での一周も和やかな空間で最高だったなぁ。</p>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_R0003646.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_R0003646.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_R0003667.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_R0003667.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>最初の目的地の予定だった、玉川村の乙字ケ滝。阿武隈川唯一の滝らしい。高さはないが、広さはあって、そこそこの見所。横の「乙な駅 たまかわ」(隈研吾氏設計。ルーバーっぽい見た目）に立ち寄って帰る。</p>
<p>帰りは体調がすぐれず、妻に運転してもらったのだけど、途中でカメラがないことに気づいてあたふたしていたのだけど、家に着くとポケットからカメラが普通に出てきて呆れられる。ハハハ…。</p>
<div class="photos photos-medium"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_R0003671.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_R0003671.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/18/210000</link>
            <guid isPermaLink="false">/entry/2026/10/18/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Sun, 18 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月17日]]></title>
            <description><![CDATA[<p>朝目が覚めると、OpenAI の API のチャージ(課金)したよ、と大量のメール。夜、寝る前に仕込んだエーアイ氏がヤンチャして叩きまくっていた。Codex に sol で subagent で処理して、と書いたらまさか API 経由で叩くなんて…。直前、別の処理で API を使ったので、そのことが尾を引いていたっぽいのであった。処理件数が数千件だったからまだ良かったものの、件数が多かったなら、間違いなく費用の hard limit まで叩いていたなぁ。勉強料勉強料…。</p>
<hr>
<p>ベコ氏の保育園の秋祭り。秋祭りの係りだったので妻は前日、当日と調理担当。私はベコ氏の見守り役。天然色素での染め物、フェルト加工、芋掘り、人形劇、とどれも楽しそう。ベコ氏はもうちょっと大きくなったらだね。</p>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_R0003619.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_R0003619.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_R0003603.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_R0003603.webp" class="photo" itemprop="image" /></a></span></div>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_R0003626.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_R0003626.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_R0003636.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_R0003636.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/17/210000</link>
            <guid isPermaLink="false">/entry/2026/10/17/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月16日]]></title>
            <description><![CDATA[<p>ふと X にログインすると、Saquusha 氏の <a href="https://bunkadenrai.saqoosha.workers.dev/">3DGS を用いた写真からの 3D ステージ生成</a>がすごーい。今は大量の写真があれば作れちゃう時代なのか。どんな感じで実現できるのだろうかと、ちょっと調べると、写真間の共通する特徴点から撮影位置や角度を推定する(SfM = Structure from Motion とか)という技術があり、その結果と組み合わせて 3D Gaussian Splatting(3DGS)で空間を再構築するらしい。SfM は COLMAP という定番 OSS があり、最近では VGGT のように Transformer でカメラ位置や 3D 構造を直接推定するモデルも公開されている。GPS の情報などがなくても、異なる場所から撮影された写真だけでカメラ位置まで推定できるのが面白い。もちろん、発想に加え、それを「面白い」と思うプロダクトとして高品質な web サイトを作っちゃう力がすごいのだけどね。</p>
<p>他にも <a href="https://zenn.dev/saqoosha/articles/circular-spotify-vinyl-display">円形ディスプレイに Spotify カバーアートを表示するデバイスを作った話</a>や、<a href="https://zenn.dev/saqoosha/articles/canopy-macropad-custom-pcb">プロンプトだけでオレオレカスタムキーデバイスを作った話（後編・基板から作る）</a>もPCBをエーアイ氏経由で作ったりして、自分の範疇じゃない部分をエーアイ氏にやってもらっていて、面白いのだよなぁ。</p>
<p><a href="https://saqoo.sh/a/">https://saqoo.sh/a/</a>のフィード欲しい！</p>
<hr>
<div class="photos photos-medium"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_L1005862.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_L1005862.webp" class="photo" itemprop="image" /></a></span></div>
<p>そろそろ朝は寒く、手が悴むので、机の上に敷く卓上ヒートカーペット(?)を出す。使っているのは<a href="https://item.rakuten.co.jp/lafuture/lff-dh01/?variantId=r-sku00000005&#x26;scid=me_ich_conf_order_03&#x26;_mpt=101&#x26;_mpe=397974-20241014-0596847022">Lafuture ぽかぽかデスクマットヒーター レギュラーサイズ</a>。小さいサイズがちょうどキーボードとマウス(うちのマウスパッドは小型)にフィットするんだよね。冬はこれがないとやってられないんだよなぁ。愛用品。</p>]]></description>
            <link>https://secon.dev/entry/2026/10/16/210000</link>
            <guid isPermaLink="false">/entry/2026/10/16/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Fri, 16 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月15日]]></title>
            <description><![CDATA[<p>LLM を FT して Jev っぽいモデル、適当なのは簡単に作れると思っているのだが果たしてどうだろう、と思ったので作ってみて<a href="https://secon.dev/entry/2026/10/15/100000-saihai-japanese-decision-benchmark/">記事</a>を書く。結果としては思った感じの方法で作れたし、ちょっとした物を作る程度なら簡単だった。エーアイ関係の大体のモデルは、エーアイ氏のおかげで、GPUさえあれば雑に作れる世の中になったよなぁ。逆にいうと、GPUがないと作れないのだが。</p>
<p>そして一番面倒なのが記事やドキュメントを書くことなんだけど、最近は開発中にやっていること(成功も失敗も)を全てまとめているので、結果のファクトや手順なども作り、エーアイ氏と雑談しながら草稿を書いて、最後に整えて完了。当初は GTP-6.1-Sol で全てをやっていたのだけど、日本語記事はどうやっても品質が悪く、Opus 5.5 氏に代わってもらったところ、十分な品質の文体になったのでよかったよかった。</p>
<hr>
<p>ベコ氏の「はじめてトミカ」。床に投げつけてもプラスチックなのでほとんど傷つかない。摩擦抵抗が少ないのか、めちゃくちゃスムーズに走る。床なら10m以上走る感じですごいね。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261019_L1005859.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261019_L1005859.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/15/210000</link>
            <guid isPermaLink="false">/entry/2026/10/15/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Thu, 15 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[日本語 Decision モデル "saihai" (采配) と、日本語 Decision モデルベンチマークの公開]]></title>
            <description><![CDATA[<p>TypeSafe AI の System One Decision モデル Jev のような Decision モデルを、日本語のデータセットを多く含めて学習した saihai (采配) を公開しました。学習に利用したデータセットも公開しています。</p>
<ul>
<li><a href="https://huggingface.co/hotchpotch/saihai-v1-8b">saihai-v1-8b</a></li>
<li><a href="https://huggingface.co/hotchpotch/saihai-v1-8b-gguf">saihai-v1-8b-gguf</a></li>
<li><a href="https://huggingface.co/hotchpotch/saihai-v1-310m">saihai-v1-310m</a> (小型モデル)</li>
</ul>
<div style="text-align:center">
<a href="https://huggingface.co/spaces/hotchpotch/S1MB-leaderboard?category=japanese-v1"><img src="https://storage.googleapis.com/secons-site-images/other/blog_images/20261015-saihai-benchmark.webp" alt="日本語 Decision ベンチマーク (S1MB japanese-v1・27 タスク) での saihai-8b と他モデルの比較" width="500"></a>
</div>
<p>saihai-8b は、オープンかつ日本語に強い大規模言語モデル <a href="https://huggingface.co/llm-jp/llm-jp-4.1-8b-thinking">llm-jp-4.1-8b-thinking</a> を基盤モデルとし、Decision モデルとしてのファインチューニングを行った 8B サイズのモデルです。llm-jp のモデルを用いることで、日本のドメイン知識を最大限活かすことができそうですね。ライセンスも llm-jp と同じ Apache 2.0 です。</p>
<p>通常のモデル重みに加えて GGUF も公開しているので、各所で利用されている推論エンジン llama.cpp に最近追加された <code>/v1/systemone</code> API エンドポイントでも利用できるようにしています。</p>
<p>また、小型の saihai-310m も合わせて公開しました。こちらは decoder の LLM ではなく、<a href="https://secon.dev/entry/2026/09/30/100000-bekko-system-one-v0-release/">bekko-system-one</a> と同じアプローチで学習した encoder モデルで、日本語の reranker である <a href="https://huggingface.co/cl-nagoya/ruri-v3-reranker-310m">ruri-v3-reranker-310m</a> をベースにしています。ライセンスは ruri と同じ Apache 2.0 です。</p>
<p>なお、記事の後半にはテクニカルノートも書いているので、技術方面に興味がある方はご覧ください。</p>
<h1>日本語 Decision モデルベンチマーク</h1>
<p>日本語でのモデル性能を測るため、<a href="https://github.com/hotchpotch/S1MB">S1MB (System One Mosaic Benchmark)</a> の日本語ベンチマークセット <a href="https://huggingface.co/datasets/hotchpotch/S1MB-japanese-v1"><code>japanese-v1</code></a> を作成しました。すでに公開されている NLI などの日本語の特定タスクのデータセット 19 タスクと、今回 Decision モデル用に GPT-6.1-Sol を用いて作成した合成データセット 8 タスクを組み合わせたもので、27 タスクのベンチマークとなります。また、評価結果は <a href="https://huggingface.co/spaces/hotchpotch/S1MB-leaderboard?category=japanese-v1">S1MB の leaderboard</a> で確認できます。</p>
<ul>
<li><a href="https://huggingface.co/spaces/hotchpotch/S1MB-leaderboard?category=japanese-v1">https://huggingface.co/spaces/hotchpotch/S1MB-leaderboard?category=japanese-v1</a></li>
</ul>
<p>タスクは回答の型によって次の 3 種類に分けています。</p>
<ul>
<li><strong>Noul</strong>: はい / いいえの二択</li>
<li><strong>Choice</strong>: 複数の候補からの選択</li>
<li><strong>Score</strong>: 0, 1, 2, 3, ... といった段階でのスコア付け</li>
</ul>
<p>結果は以下です。Jev には及ばないまでも、saihai-8b は 8B というモデルサイズながら、そこそこのパフォーマンスですね。</p>
<p>ここでは Jev・GPT-6 Luna の API モデルと、パラメータ数が 12B 以下のモデルから選んで掲載しています。27B クラスのモデルなどを含む全体の結果は、leaderboard をご覧ください。各列で Jev・GPT-6 Luna を除いた最良の値を太字にしています。</p>
<table>
<thead>
<tr>
<th>モデル</th>
<th align="right">パラメータ数</th>
<th align="right">Task Avg</th>
<th align="right">Noul</th>
<th align="right">Choice</th>
<th align="right">Score</th>
<th align="right">汎用 Noul</th>
<th align="right">汎用 Choice</th>
<th align="right">汎用 Score</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://docs.typesafe.ai/models">Jev 1.13</a></td>
<td align="right">不明</td>
<td align="right">56.33</td>
<td align="right">54.22</td>
<td align="right">71.08</td>
<td align="right">43.70</td>
<td align="right">64.67</td>
<td align="right">75.22</td>
<td align="right">40.45</td>
</tr>
<tr>
<td><a href="https://developers.openai.com/api/docs/guides/decisions">GPT-6 Luna (Decisions API)</a></td>
<td align="right">不明</td>
<td align="right">55.00</td>
<td align="right">62.10</td>
<td align="right">63.55</td>
<td align="right">39.34</td>
<td align="right">67.11</td>
<td align="right">72.89</td>
<td align="right">30.89</td>
</tr>
<tr>
<td><a href="https://huggingface.co/hotchpotch/saihai-v1-8b">saihai-8b</a></td>
<td align="right">8B</td>
<td align="right"><strong>49.77</strong></td>
<td align="right">48.40</td>
<td align="right"><strong>61.78</strong></td>
<td align="right">39.11</td>
<td align="right">52.22</td>
<td align="right">69.31</td>
<td align="right">21.01</td>
</tr>
<tr>
<td><a href="https://huggingface.co/EldanRing/Winnow-12B">Winnow 12B</a></td>
<td align="right">12B</td>
<td align="right">48.54</td>
<td align="right"><strong>49.63</strong></td>
<td align="right">57.19</td>
<td align="right">38.79</td>
<td align="right"><strong>58.22</strong></td>
<td align="right">72.24</td>
<td align="right"><strong>32.34</strong></td>
</tr>
<tr>
<td><a href="https://huggingface.co/PelaAI/KnowLine-4B-Gen3">KnowLine Gen3</a></td>
<td align="right">4B</td>
<td align="right">46.41</td>
<td align="right">43.79</td>
<td align="right">54.97</td>
<td align="right"><strong>40.48</strong></td>
<td align="right">48.44</td>
<td align="right">71.30</td>
<td align="right">21.87</td>
</tr>
<tr>
<td><a href="https://huggingface.co/frontier-infra/jebadiah-9b-v2">Jebadiah 9B v2</a></td>
<td align="right">9B</td>
<td align="right">45.20</td>
<td align="right">42.39</td>
<td align="right">56.29</td>
<td align="right">36.93</td>
<td align="right">56.00</td>
<td align="right"><strong>72.87</strong></td>
<td align="right">25.58</td>
</tr>
<tr>
<td><a href="https://huggingface.co/Cloudflare/clef-flash">Clef Flash</a></td>
<td align="right">9B</td>
<td align="right">45.06</td>
<td align="right">40.39</td>
<td align="right">58.92</td>
<td align="right">35.88</td>
<td align="right">45.56</td>
<td align="right">70.33</td>
<td align="right">22.42</td>
</tr>
<tr>
<td><a href="https://huggingface.co/mohit67890/imajev-4b">Imajev 4B 8k</a></td>
<td align="right">4B</td>
<td align="right">39.02</td>
<td align="right">30.93</td>
<td align="right">53.93</td>
<td align="right">32.20</td>
<td align="right">43.78</td>
<td align="right">70.74</td>
<td align="right">14.28</td>
</tr>
<tr>
<td><a href="https://huggingface.co/togethercomputer/Tev1-4B-experimental">Tev1 4B</a></td>
<td align="right">4B</td>
<td align="right">37.23</td>
<td align="right">29.30</td>
<td align="right">50.80</td>
<td align="right">31.58</td>
<td align="right">43.56</td>
<td align="right">68.19</td>
<td align="right">10.88</td>
</tr>
<tr>
<td><a href="https://huggingface.co/hotchpotch/saihai-v1-310m">saihai-310m</a></td>
<td align="right">315M</td>
<td align="right">30.19</td>
<td align="right">23.29</td>
<td align="right">40.99</td>
<td align="right">26.27</td>
<td align="right">22.44</td>
<td align="right">46.13</td>
<td align="right">0.00</td>
</tr>
<tr>
<td><a href="https://huggingface.co/convaiinnovations/laya-multilingual">Laya multilingual</a></td>
<td align="right">322M</td>
<td align="right">5.29</td>
<td align="right">4.81</td>
<td align="right">11.06</td>
<td align="right">0.00</td>
<td align="right">6.22</td>
<td align="right">8.57</td>
<td align="right">0.00</td>
</tr>
</tbody>
</table>
<p>注意点として、saihai は日本語タスクを解きやすくするため、いくつかのベンチマークタスクの元データセットの train set を学習しているので、ベンチマークの点数は上がりやすくなっています (test set と重複するデータは、できる限り除いています)。その影響を調べた対照実験の結果は後半に載せています。</p>
<p>表の見方は次のとおりです。</p>
<ul>
<li>Noul・Choice・Score の 3 列は、既存データセット由来 19 タスクと合成 8 タスクの計 27 タスクを、それぞれ型ごとに平均した値です。「汎用」の 3 列は、そのうち合成 8 タスクだけを型ごとに平均した値です。</li>
<li>Task Avg は、Noul・Choice・Score の 3 列を等重みで平均した総合値です。「汎用」の 3 列は Task Avg に別途加算されていません。</li>
<li>値は 0〜100 で、小数 2 桁に丸めています。どれも基準値から調整したスコアで、単純な正解率ではありません。</li>
</ul>
<p>saihai-8b は、近いパラメータ数のモデルと比べても健闘していると感じます。評価対象と同じ元データセットの train を一部学習しているとはいえ、日本語の特定タスクを解くモデルとしては、よい結果になりました (後述の比較では、日本語で作られたタスクで特に強い結果でした)。一方、合成タスクの Noul では Winnow 12B や Jebadiah 9B v2 を、Choice では多くのモデルを下回り、Score にも差が見られます。特定タスクでの強さと、柔軟な入力への対応力には差があるようです。</p>
<p>OpenAI の Decision モデルである GPT-6 Luna (Decisions API) は、Task Avg 55.00 と Jev に迫る結果でした。Noul (62.10) と汎用 Noul (67.11) では Jev を上回っています。なお、GPT-6 Luna は API が回答を拒否した判断があり (日本語では 1 件)、その判断は不正解として採点しています。</p>
<p>小型の saihai-310m は、Task Avg 30.19 と、数 B クラスの decoder モデルとはまだ差があります。ただ、同じく encoder アーキテクチャで同程度のサイズの Laya multilingual (Task Avg 5.29) と比べると、かなり良い性能です。特に Choice は 40.99 で、JCommonsenseQA (89.58)・KUCI (82.67)・JNLI (79.00) などではそれなりの性能を示しています。Noul も CommonsenseMoralJA (74.67) や合成の Diverse (65.33) ではそこそこ解けています。一方、知識や数理を問う合成タスクはほぼ解けておらず、汎用 Score は 0.00 でした。また、saihai-310m は評価対象と同じ元データセットの train を、saihai-8b よりもずっと多く学習しているので (後述)、その分スコアは上がりやすくなっている点にご注意ください。</p>
<p>Decision モデルというと、decoder アーキテクチャの大きなモデルが目立ちますが、小型の encoder モデルでも、将来は Decision モデルとして十分な性能のものが現れるのでは、と期待しています。</p>
<h2>既存の日本語データセットの活用</h2>
<p>既存の日本語データセットは、タスクごとに Noul・Choice・Score のどの型が合うかを考えて割り振りました。データは原作者が用意した test set を基本とし、一部は validation や train、もともと分割されていない問題群も使っています (例外は後述)。各タスクは最大 300 件です。なお、この手法に興味がある方は、<a href="https://zenn.dev/ivry/articles/65c1c4242e1156">IVRy さんの「日本語ベンチマークで Jev の性能を検証する」</a>に具体的な方法がわかりやすく書かれているので、参照ください。</p>
<p>これらのデータを、Decision モデルが回答しやすい instruction・state の構造に変換して評価用データセットを作成しました。同時に、train 用のデータが用意されているものは学習用データセットも作成し、saihai の学習にも使っています。なお、train 用のデータには、まれに test set と同じデータが含まれるため、できる限り削除しています。</p>
<p>以下、ベンチマークと同じ元データセットの train を「系列 train」と呼びます。利用したデータセットは以下で、「系列 train の投入」列は、評価問題ではなく、系列 train から学習に使った件数です。</p>
<table>
<thead>
<tr>
<th>データセット</th>
<th>型</th>
<th align="right">評価件数</th>
<th>ライセンス</th>
<th>系列 train の投入</th>
</tr>
</thead>
<tbody>
<tr>
<td>CommonsenseMoralJA</td>
<td>Noul</td>
<td align="right">300</td>
<td>MIT</td>
<td>✓ 400件</td>
</tr>
<tr>
<td>JamC-QA</td>
<td>Choice</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0</td>
<td>—</td>
</tr>
<tr>
<td>JaNLI</td>
<td>Choice</td>
<td align="right">285</td>
<td>CC-BY-SA-4.0</td>
<td>✓ 400件</td>
</tr>
<tr>
<td>JCommonsenseQA</td>
<td>Choice</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0</td>
<td>✓ 400件</td>
</tr>
<tr>
<td>JCulture-MCQ</td>
<td>Noul</td>
<td align="right">283</td>
<td>CC-BY-4.0</td>
<td>—</td>
</tr>
<tr>
<td>JNLI</td>
<td>Choice</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0</td>
<td>✓ 382件</td>
</tr>
<tr>
<td>KUCI</td>
<td>Choice</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0</td>
<td>✓ 400件</td>
</tr>
<tr>
<td>Mintaka (日本語・Boolean)</td>
<td>Noul</td>
<td align="right">300</td>
<td>CC-BY-4.0</td>
<td>✓ 400件</td>
</tr>
<tr>
<td>MMLU-ProX (日本語)</td>
<td>Choice</td>
<td align="right">300</td>
<td>MIT</td>
<td>—</td>
</tr>
<tr>
<td>MMMLU (日本語)</td>
<td>Choice</td>
<td align="right">300</td>
<td>MIT</td>
<td>—</td>
</tr>
<tr>
<td>JSICK (STS)</td>
<td>Score</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0</td>
<td>✓ 395件</td>
</tr>
<tr>
<td>JSTS</td>
<td>Score</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0</td>
<td>✓ 396件</td>
</tr>
<tr>
<td>NanoJMTEB-v2 (検索)</td>
<td>Choice</td>
<td align="right">300</td>
<td>元データ別の条件</td>
<td>—</td>
</tr>
<tr>
<td>JCoLA</td>
<td>Noul</td>
<td align="right">299</td>
<td>CC-BY-SA-4.0</td>
<td>✓ 358件</td>
</tr>
<tr>
<td>Jamp</td>
<td>Choice</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0</td>
<td>✓ 358件</td>
</tr>
<tr>
<td>JSeM</td>
<td>Choice</td>
<td align="right">300</td>
<td>BSD-3-Clause</td>
<td>—</td>
</tr>
<tr>
<td>GPQA (日本語)</td>
<td>Choice</td>
<td align="right">300</td>
<td>CC-BY-4.0</td>
<td>—</td>
</tr>
<tr>
<td>JMMLU Japan</td>
<td>Choice</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0 / CC-BY-NC-ND-4.0 (科目別)</td>
<td>—</td>
</tr>
<tr>
<td>SOBACO Culture</td>
<td>Choice</td>
<td align="right">300</td>
<td>CC-BY-SA-4.0 (gated access)</td>
<td>—</td>
</tr>
</tbody>
</table>
<p>以下は補足です。</p>
<ul>
<li><strong>test set の例外</strong>: JCoLA は元の validation、JSeM はもともと train/test に分かれていない問題群、NanoJMTEB は評価用 split、JMMLU Japan は元の split 指定なし、SOBACO Culture は元の train を使っています。GPQA も元の評価用問題群です。すべてが「原作者が定義した test」というわけではありません。</li>
<li><strong>JSICK</strong> は学習側が Choice、評価側が Score ですが、同じ系列として扱っています。</li>
<li><strong>JMMLU Japan</strong> は日本史・慣用句・公民・地理を各 75 件、<strong>SOBACO Culture</strong> は日本文化の 300 件です。</li>
<li><strong>検索タスク</strong> (NanoJMTEB) は、JMTEB の検索系ベンチマークを元にした、正例 1 件と非正例 3〜5 件から選ぶ Choice です。検索系のベンチマークを複合しているので、ライセンスは行ごとに異なります。</li>
<li><strong>ライセンス</strong>は素材ごとに条件があり、この表は要約です。JMMLU の科目別の利用制限や、検索素材の帰属・再配布条件は元資料をご確認ください。</li>
</ul>
<h2>合成データセット</h2>
<p>ここまでのデータセットは、「特定タスクにフォーカスした」Decision モデルの性能を測るものです。そこで、既存タスクでは測れない「ある程度柔軟な入力に対して、適切な回答を選べるか」を見るタスクを、GPT-6.1-Sol で合成データセットとして生成しました。真の汎化性能を測れているとはいえませんが、便宜上「汎化性能指標」のタスクと呼んでいます。</p>
<p>合成データは 3 系列・8 タスク、合計 2,400 件です。</p>
<table>
<thead>
<tr>
<th>系列</th>
<th>型</th>
<th>件数</th>
<th>見るもの</th>
</tr>
</thead>
<tbody>
<tr>
<td>Diverse</td>
<td>Noul / Choice</td>
<td>各300件</td>
<td>カジュアルな指示、多様な状態・入力形式への対応</td>
</tr>
<tr>
<td>Knowledge hard</td>
<td>Noul / Choice / Score</td>
<td>各300件</td>
<td>知識や文脈に基づく判断</td>
</tr>
<tr>
<td>Math formal hard</td>
<td>Noul / Choice / Score</td>
<td>各300件</td>
<td>数理的な条件や論理的な判断</td>
</tr>
</tbody>
</table>
<p>Diverse には Score タスクがありません。また、以前作った不確実性のタスクは、現在の評価対象から外しています。合成データのライセンスは、OpenAI のモデルを用いて作ったため、CC BY-NC 4.0 としています。また正答は人手による独立したブラインド検証をしていないので、この 8 タスクの点数だけで、あらゆる使い方に汎化できるとは言えません。</p>
<h1>英語ベンチマークでの評価</h1>
<p>saihai は日本語向けのモデルですが、学習データには英語のデータも多く含まれています。そこで、S1MB の英語ベンチマークセット <a href="https://huggingface.co/datasets/hotchpotch/S1MB-english-v1"><code>english-v1</code></a> でも評価しました。english-v1 は 137 タスクで、「汎用」の 3 列は、Diverse と Contextual の合成タスク 6 タスク (各型 2 タスク) を型ごとに平均した値です。列の見方は日本語の表と同じですが、タスクの構成が違うので、日本語の表と数値を直接比べることはできません。</p>
<p>日本語の表と同じモデルに、英語の encoder モデルである <a href="https://huggingface.co/hotchpotch/bekko-system-one-v0-400m">bekko-system-one-v0-400m</a>・Laya・Laya typed-decisions を加えています。各列で Jev・GPT-6 Luna を除いた最良の値を太字にしています。</p>
<table>
<thead>
<tr>
<th>モデル</th>
<th align="right">パラメータ数</th>
<th align="right">Task Avg</th>
<th align="right">Noul</th>
<th align="right">Choice</th>
<th align="right">Score</th>
<th align="right">汎用 Noul</th>
<th align="right">汎用 Choice</th>
<th align="right">汎用 Score</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://docs.typesafe.ai/models">Jev 1.13</a></td>
<td align="right">不明</td>
<td align="right">59.59</td>
<td align="right">64.63</td>
<td align="right">67.22</td>
<td align="right">46.92</td>
<td align="right">99.00</td>
<td align="right">98.68</td>
<td align="right">91.14</td>
</tr>
<tr>
<td><a href="https://developers.openai.com/api/docs/guides/decisions">GPT-6 Luna (Decisions API)</a></td>
<td align="right">不明</td>
<td align="right">49.21</td>
<td align="right">54.54</td>
<td align="right">56.23</td>
<td align="right">36.85</td>
<td align="right">91.00</td>
<td align="right">98.03</td>
<td align="right">75.15</td>
</tr>
<tr>
<td><a href="https://huggingface.co/PelaAI/KnowLine-4B-Gen3">KnowLine Gen3</a></td>
<td align="right">4B</td>
<td align="right"><strong>57.30</strong></td>
<td align="right">59.97</td>
<td align="right"><strong>65.49</strong></td>
<td align="right"><strong>46.45</strong></td>
<td align="right">93.00</td>
<td align="right">96.71</td>
<td align="right">74.47</td>
</tr>
<tr>
<td><a href="https://huggingface.co/EldanRing/Winnow-12B">Winnow 12B</a></td>
<td align="right">12B</td>
<td align="right">54.56</td>
<td align="right"><strong>61.38</strong></td>
<td align="right">60.70</td>
<td align="right">41.61</td>
<td align="right"><strong>95.00</strong></td>
<td align="right">98.03</td>
<td align="right"><strong>90.19</strong></td>
</tr>
<tr>
<td><a href="https://huggingface.co/hotchpotch/bekko-system-one-v0-400m">bekko-system-one-v0-400m</a></td>
<td align="right">395M</td>
<td align="right">50.60</td>
<td align="right">51.24</td>
<td align="right">61.32</td>
<td align="right">39.25</td>
<td align="right">52.00</td>
<td align="right">80.30</td>
<td align="right">31.14</td>
</tr>
<tr>
<td><a href="https://huggingface.co/hotchpotch/saihai-v1-8b">saihai-8b</a></td>
<td align="right">8B</td>
<td align="right">50.59</td>
<td align="right">59.96</td>
<td align="right">59.51</td>
<td align="right">32.29</td>
<td align="right">91.00</td>
<td align="right">93.41</td>
<td align="right">71.54</td>
</tr>
<tr>
<td><a href="https://huggingface.co/frontier-infra/jebadiah-9b-v2">Jebadiah 9B v2</a></td>
<td align="right">9B</td>
<td align="right">48.67</td>
<td align="right">53.30</td>
<td align="right">58.23</td>
<td align="right">34.48</td>
<td align="right">92.00</td>
<td align="right">95.39</td>
<td align="right">76.33</td>
</tr>
<tr>
<td><a href="https://huggingface.co/Cloudflare/clef-flash">Clef Flash</a></td>
<td align="right">9B</td>
<td align="right">48.06</td>
<td align="right">51.82</td>
<td align="right">63.05</td>
<td align="right">29.32</td>
<td align="right">89.00</td>
<td align="right"><strong>98.05</strong></td>
<td align="right">66.74</td>
</tr>
<tr>
<td><a href="https://huggingface.co/togethercomputer/Tev1-4B-experimental">Tev1 4B</a></td>
<td align="right">4B</td>
<td align="right">47.07</td>
<td align="right">50.73</td>
<td align="right">53.36</td>
<td align="right">37.11</td>
<td align="right">88.00</td>
<td align="right">94.05</td>
<td align="right">70.15</td>
</tr>
<tr>
<td><a href="https://huggingface.co/mohit67890/imajev-4b">Imajev 4B 8k</a></td>
<td align="right">4B</td>
<td align="right">46.20</td>
<td align="right">53.49</td>
<td align="right">56.70</td>
<td align="right">28.41</td>
<td align="right">92.00</td>
<td align="right">95.39</td>
<td align="right">72.80</td>
</tr>
<tr>
<td><a href="https://huggingface.co/hotchpotch/saihai-v1-310m">saihai-310m</a></td>
<td align="right">315M</td>
<td align="right">40.59</td>
<td align="right">40.92</td>
<td align="right">47.20</td>
<td align="right">33.66</td>
<td align="right">16.00</td>
<td align="right">58.71</td>
<td align="right">13.21</td>
</tr>
<tr>
<td><a href="https://huggingface.co/convaiinnovations/laya-typed-decisions">Laya typed-decisions</a></td>
<td align="right">421M</td>
<td align="right">15.00</td>
<td align="right">20.06</td>
<td align="right">18.93</td>
<td align="right">5.99</td>
<td align="right">22.00</td>
<td align="right">58.80</td>
<td align="right">14.67</td>
</tr>
<tr>
<td><a href="https://huggingface.co/convaiinnovations/laya">Laya</a></td>
<td align="right">421M</td>
<td align="right">13.36</td>
<td align="right">20.19</td>
<td align="right">16.31</td>
<td align="right">3.58</td>
<td align="right">9.00</td>
<td align="right">54.83</td>
<td align="right">15.67</td>
</tr>
<tr>
<td><a href="https://huggingface.co/convaiinnovations/laya-multilingual">Laya multilingual</a></td>
<td align="right">322M</td>
<td align="right">9.28</td>
<td align="right">14.01</td>
<td align="right">13.03</td>
<td align="right">0.79</td>
<td align="right">6.00</td>
<td align="right">36.67</td>
<td align="right">0.75</td>
</tr>
</tbody>
</table>
<p>英語では、saihai-8b は Task Avg 50.59 で、API モデルを除く decoder モデル 7 つの中では 3 番目でした。Noul は 59.96 と比較的高い一方、Score は 32.29 と低めです。汎用 Noul・Choice も 90 を超えており、日本語向けに学習したモデルながら、英語でも必要十分な性能を持っているといえそうですね。</p>
<p>なお、GPT-6 Luna は英語では Task Avg 49.21 と、日本語ほどの順位ではありませんでした。英語では API が回答を拒否した判断が 17 件あり、不正解として採点しているので、その分も多少影響しています。</p>
<p>saihai-310m は 40.59 で、英語の学習データを bekko-system-one のデータセットの約 10% に絞っていることもあり、bekko-system-one-v0-400m (50.60) より低くなりました。特に汎用 Noul・Score は大きく下がっています。</p>
<p>それでも、英語の encoder モデルである Laya (13.36) や Laya typed-decisions (15.00) と比べると、saihai-310m の Task Avg は 2.5 倍以上で、Noul・Choice・Score のいずれも大きく上回っています。一方、汎用の 3 列は Laya 系と同程度 (汎用 Score はやや下回る) で、柔軟な入力への対応は小型 encoder にとってまだ難しいところですね。</p>
<p>また、英語の汎用 Noul・Choice は、多くの decoder モデルが 90 前後に集まっていて差がつきにくくなっています。数値は直接比べられないものの、日本語の合成タスクでは Jev でも汎用 Noul が 64.67 なので、今回作った日本語の合成タスクは、差がつきやすい問題になっているようです。</p>
<h1>saihai モデルの作成</h1>
<p>saihai-8b と saihai-310m はアーキテクチャが異なるので、それぞれ分けて説明します。</p>
<h2>saihai-8b</h2>
<p>モデル作成に使った学習コードとデータセットは、それぞれ公開しています。</p>
<ul>
<li>学習コード: <a href="https://github.com/hotchpotch/saihai">hotchpotch/saihai</a></li>
<li>学習データ: <a href="https://huggingface.co/datasets/hotchpotch/saihai-v1-dataset">hotchpotch/saihai-v1-dataset</a></li>
</ul>
<h3>モデルアーキテクチャ</h3>
<p>saihai-8b は、いわゆる decoder アーキテクチャの LLM で、現在一般的な Decision モデルの学習方法を用いています。Decision モデルの構造は、まだ汎用的なものが定まっていないのが現状です。ただ、推論エンジンの一つである llama.cpp では、<code>/v1/systemone</code> という推論エンドポイントで Perplexity の <a href="https://huggingface.co/perplexity-ai/pplx-decider-v1-27b">pplx-decider-v1-27b</a> の形式が使えるようだったので、それに合わせた構造になるように、学習しています。</p>
<p>学習から推論までの流れは以下です。</p>
<ol>
<li>学習データの候補と、教師の確率分布を対応付けます。正答や出典情報はモデルの入力に含めません。</li>
<li>指示・状態・候補を JSON にし、基盤モデルの chat template に埋め込みます。候補には、tokenizer で 1 token になる A、B などのコードを割り当てます。</li>
<li>回答を始める直前までを入力し、最後の有効 token の hidden state を取り出します。</li>
<li>bias のない FP32 の線形 head で候補の logits を計算し、その問題で使う候補の中で softmax を取ります。head は、元の LM head のうち候補コード token の行から初期化します。</li>
<li>教師の確率分布との cross entropy を損失として、LoRA と候補 head を学習します。backbone は BF16 です。全パラメータを更新するとメモリに載らず、学習も遅くなるため、LoRA を用いています。</li>
<li>配布時には LoRA を merge し、学習した head を元の LM head の候補コード token の行へ書き戻します。推論では 1 回の forward から候補の確率を読み取るだけで、文章や reasoning は生成しません。</li>
</ol>
<p>候補コードは llama.cpp の pplx-decider と同じ規則で、A〜Z、AA〜ZZ のうち単一 token になるものだけを選び、最大 255 候補に対応させています。Noul の候補順は false → true、Score は 2〜10 段階です。pplx の学習方法を丸ごと再現したわけではなく、候補 token の確率を読み出す仕組みを合わせた形ですね。</p>
<h3>学習データ</h3>
<p>学習データには、以下の 3 つを使っています。</p>
<ul>
<li>既存の英語 Decision モデルの学習に使われているデータセット。既存データセットから抽出したものや、合成データセットを含みます</li>
<li>日本語ベンチマークの元データセットのうち、train にあたるもの (系列 train)</li>
<li><a href="https://huggingface.co/llm-jp/llm-jp-4.1-32b-a3b-thinking">llm-jp-4.1-32b-a3b-thinking</a> を用いて作成した、日本語の合成データセット</li>
</ul>
<p>内訳は以下で、合計 33,532 件を学習させています。</p>
<table>
<thead>
<tr>
<th>学習データ</th>
<th align="right">件数</th>
</tr>
</thead>
<tbody>
<tr>
<td>既存の英語素材など・規則データ</td>
<td align="right">16,023</td>
</tr>
<tr>
<td>日本語ベンチマークの系列 train</td>
<td align="right">3,889</td>
</tr>
<tr>
<td>日本語の合成データ</td>
<td align="right">13,620</td>
</tr>
<tr>
<td>合計</td>
<td align="right">33,532</td>
</tr>
</tbody>
</table>
<p>学習は LoRA (rank 16 / alpha 32) を用い、RTX 5090 で約 3.62 時間でした (評価や量子化の時間は含みません)。そのほかの条件は、1 epoch、実効 batch size 16、最大入力長 8,192、seed 42 です。279 件の固定 validation を学習中に 10 回測定していますが、validation が最良の step ではなく、最後の checkpoint を使っています。</p>
<p>なお、モデル重みのライセンス (Apache 2.0) と、学習データの素材ごとのライセンスは別です。</p>
<h2>saihai-310m</h2>
<p>saihai-310m は、<a href="https://secon.dev/entry/2026/09/30/100000-bekko-system-one-v0-release/">bekko-system-one</a> のアプローチで学習した、小型の encoder モデルです。学習コードは bekko-system-one のものを使っています。</p>
<ul>
<li>学習コード・手順: <a href="https://github.com/hotchpotch/bekko-system-one/blob/main/docs/saihai-v1-310m.md">bekko-system-one の saihai-v1-310m 学習ドキュメント</a></li>
<li>学習データ: <a href="https://huggingface.co/datasets/hotchpotch/saihai-v1-310m-dataset">hotchpotch/saihai-v1-310m-dataset</a></li>
</ul>
<h3>モデルアーキテクチャ</h3>
<p>アーキテクチャは bekko-system-one と同じです。簡単に書くと、instruction と state を共有の prefix として一度だけ処理し、その各層の Key/Value を、各候補 (criteria) の処理で再利用します。各候補は共有 prefix と自分自身だけを参照し、候補側の表現からスコアを計算します。長い state を候補の数だけ処理し直さずに済むので、小さなモデルで効率よく推論できます。詳しくは bekko-system-one の記事をご覧ください。</p>
<p>bekko-system-one では、素の encoder よりも、reranker として学習済みのモデルを初期値にした方が性能が上がりました (特に 68M のモデルで、損失 (CE) と各タスクの精度がともに改善しました)。それに倣い、saihai-310m では日本語の高性能 reranker である <a href="https://huggingface.co/cl-nagoya/ruri-v3-reranker-310m">ruri-v3-reranker-310m</a> をベースにしています。ruri-v3-reranker-310m は、<a href="https://huggingface.co/sbintuitions/modernbert-ja-310m">modernbert-ja-310m</a> を元にした <a href="https://huggingface.co/cl-nagoya/ruri-v3-pt-310m">ruri-v3-pt-310m</a> を、reranker として学習したモデルです。パラメータ数は 315M (埋め込み層を除くと 236M) です。</p>
<p>なお、saihai-310m は llama.cpp の <code>/v1/systemone</code> には対応していません。Transformers の <code>AutoModel</code> (<code>trust_remote_code=True</code>) から読み込み、saihai-8b と同じような <code>state</code>・<code>questions</code> 形式の入力で使えます。ただし、入力が長すぎる場合、saihai-8b はエラーにしますが、saihai-310m は入力を切り詰めて推論する点が異なります。</p>
<h3>学習データと学習条件</h3>
<p>学習データは、以下の 3 つを混ぜて使っています。件数は、1 つの問題に含まれる個々の判断の数です。</p>
<table>
<thead>
<tr>
<th>学習データ</th>
<th align="right">判断数</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://huggingface.co/datasets/hotchpotch/bekko-system-one-dataset-v0">bekko-system-one のデータセット</a> から、出典ごとの偏りを抑えて約 10% を抽出したもの</td>
<td align="right">840,947</td>
</tr>
<tr>
<td>日本語ベンチマークの系列 train など (7 データセット)</td>
<td align="right">116,771</td>
</tr>
<tr>
<td>日本語の合成データ (llm-jp-4.1-32b-a3b-thinking で作成)</td>
<td align="right">14,400</td>
</tr>
<tr>
<td>合計</td>
<td align="right">972,118</td>
</tr>
</tbody>
</table>
<p>日本語の系列 train は、CommonsenseMoralJA・JCommonsenseQA・JNLI・JSTS・KUCI・Mintaka・JaNLI の 7 データセットです。saihai-8b では各データセット 400 件以下に絞っていましたが、saihai-310m では採用した train をすべて使っているので、件数がずっと多くなっています (例えば KUCI は 69,527 判断)。そのため、対応するタスクのスコアは saihai-8b 以上に上がりやすくなっていると思われます。saihai-8b と同様、評価データの問題とその関連データは除いています。</p>
<p>学習は全パラメータを更新し (LoRA は使っていません)、batch size 512 で全データを 1 epoch、約 2 時間 45 分でした。encoder の学習率は 1e-5、head の学習率は 2e-4、入力長の上限は query 4,096 / 候補 2,048 tokens です。</p>
<p>S1MB の評価は、bekko-system-one と同じく、長い入力を切り詰めて入力長を配分する設定で行っています。</p>
<h1>対照実験</h1>
<p>さて、ベンチマークと同じ傾向のタスクを train に多く含んでいるので、そのせいで性能が高く出ているのでは？という疑問が出ると思います。そこで、saihai-8b について、2 つの対照実験を行いました。最後に、系列 train なしのモデルを外部の Decision モデルとも比べています。</p>
<h2>系列 train を学習しなかった場合との比較</h2>
<p>LLM-jp 4.1 8B を用いた saihai-8b に加え、Qwen3.5 の 3 サイズのモデルに対しても、系列 train を含めて学習したモデルと、除いて学習したモデルを作って比べました。以下は S1MB の Task Avg です。</p>
<table>
<thead>
<tr>
<th>基盤モデル</th>
<th align="right">系列 train あり</th>
<th align="right">系列 train なし</th>
<th align="right">差 (あり − なし)</th>
</tr>
</thead>
<tbody>
<tr>
<td>LLM-jp 8B (saihai-8b)</td>
<td align="right">49.77</td>
<td align="right">47.85</td>
<td align="right">+1.92</td>
</tr>
<tr>
<td>Qwen3.5 0.8B</td>
<td align="right">25.71</td>
<td align="right">20.66</td>
<td align="right">+5.05</td>
</tr>
<tr>
<td>Qwen3.5 4B</td>
<td align="right">45.30</td>
<td align="right">45.73</td>
<td align="right">-0.43</td>
</tr>
<tr>
<td>Qwen3.5 9B</td>
<td align="right">52.15</td>
<td align="right">48.97</td>
<td align="right">+3.18</td>
</tr>
</tbody>
</table>
<p>多くのモデルでは系列 train を学習させた方が強い結果になっていますが、Qwen3.5 4B では除いた方が 0.43 点高くなりました。系列 train を入れればどのモデルでも総合値が上がる、というわけではないですが、基本的にはスコアが上がりやすくなりました。</p>
<p>では、どのタスクで差が出ているのでしょうか。系列 train を使った 10 タスクと、それ以外の 17 タスク (うち、系列 train を使っていない既存データ由来 9 タスク、合成 8 タスク) に分けて、差を見たのが以下です。タスク群の値は各タスクのスコアの単純平均で、差は「あり − なし」です。プラスなら、系列 train を学習した方が高いことを示します。</p>
<table>
<thead>
<tr>
<th>基盤モデル</th>
<th align="right">系列 train 対応 10</th>
<th align="right">それ以外 17</th>
<th align="right">うち既存データ 9</th>
<th align="right">うち合成 8</th>
</tr>
</thead>
<tbody>
<tr>
<td>LLM-jp 8B (saihai-8b)</td>
<td align="right">+8.02</td>
<td align="right">+0.15</td>
<td align="right">+0.88</td>
<td align="right">-0.67</td>
</tr>
<tr>
<td>Qwen3.5 0.8B</td>
<td align="right">+12.95</td>
<td align="right">+0.58</td>
<td align="right">+0.93</td>
<td align="right">+0.19</td>
</tr>
<tr>
<td>Qwen3.5 4B</td>
<td align="right">+8.35</td>
<td align="right">-2.46</td>
<td align="right">-0.50</td>
<td align="right">-4.67</td>
</tr>
<tr>
<td>Qwen3.5 9B</td>
<td align="right">+10.76</td>
<td align="right">-0.58</td>
<td align="right">-0.29</td>
<td align="right">-0.90</td>
</tr>
</tbody>
</table>
<p>LLM-jp 8B では、系列 train を学習したことで、対応する 10 タスクは 8.02 点上がった一方、それ以外の 17 タスクは 0.15 点の上昇にとどまりました。どのモデルでも、対応する 10 タスクだけが大きく上がる同じ傾向で、やはり train を学習した系列のタスクが解きやすくなっている、ということですね。ただ、系列 train を除くと学習データが 33,532 件から 29,643 件に、重みの更新回数も 2,096 回から 1,853 回に減っているので、若干データが減ったことも影響しているかもしれません。</p>
<h2>基盤モデルを変えた場合との比較</h2>
<p>saihai-8b は llm-jp のモデルを使っているので、他のモデルに比べて日本のドメイン理解が強いと思われます。そこで、Qwen3.5 シリーズのいくつかのモデルも同じ学習データで学習させ、違いを見てみましょう。</p>
<p>ここでは、既存データセット由来の 19 タスクを、次の 2 つに分けています。</p>
<ul>
<li><strong>日本語オリジナル 12</strong>: 翻訳ではなく、日本語で一から作られたデータセットの 12 タスクです。日本の知識を問うタスク (後述の文化知識 4) だけでなく、推論や意味の類似度などの言語タスクも含みます。
<ul>
<li>CommonsenseMoralJA、JamC-QA、Jamp、JaNLI、JCoLA、JCommonsenseQA、JCulture-MCQ、JNLI、JSTS、KUCI、JMMLU Japan、SOBACO Culture</li>
</ul>
</li>
<li><strong>翻訳・混在 7</strong>: 英語などからの翻訳を元にしたものと、複数の元データが混ざったものの 7 タスクです。MMLU-ProX・MMMLU・GPQA のような一般知識の問題が多く含まれます。
<ul>
<li>MMLU-ProX、MMMLU、GPQA、Mintaka、JSICK、JSeM、NanoJMTEB</li>
</ul>
</li>
</ul>
<p>どちらも記事用に分けたタスク群で、日本語能力全体を定義したものではありません。Task Avg は S1MB の総合値、それ以外の列はそれぞれのタスク群の単純平均です。</p>
<table>
<thead>
<tr>
<th>モデル</th>
<th align="right">Task Avg</th>
<th align="right">日本語オリジナル 12</th>
<th align="right">翻訳・混在 7</th>
<th align="right">合成 8</th>
</tr>
</thead>
<tbody>
<tr>
<td>saihai Qwen3.5 9B</td>
<td align="right">52.15</td>
<td align="right">61.86</td>
<td align="right">52.41</td>
<td align="right">54.57</td>
</tr>
<tr>
<td><strong>saihai-8b (LLM-jp 8B)</strong></td>
<td align="right">49.77</td>
<td align="right">63.17</td>
<td align="right">45.58</td>
<td align="right">50.83</td>
</tr>
<tr>
<td>saihai Qwen3.5 4B</td>
<td align="right">45.30</td>
<td align="right">57.62</td>
<td align="right">43.04</td>
<td align="right">47.95</td>
</tr>
<tr>
<td>saihai Qwen3.5 0.8B</td>
<td align="right">25.71</td>
<td align="right">34.65</td>
<td align="right">25.42</td>
<td align="right">27.74</td>
</tr>
</tbody>
</table>
<p>全体ではサイズが少し大きい Qwen3.5 9B が上でしたが、日本語オリジナルの 12 タスクでは LLM-jp 8B が少し上でした。一方、翻訳・混在の 7 タスクでは Qwen3.5 9B が 6.83 点上で、日本語で作られた問題に LLM-jp 8B の強みが生かされているようです。また、Qwen3.5 4B・0.8B と比べると、全体スコアも LLM-jp 8B の方が高くなっています。ただし、タスクや型ごとに見ると例外もあります。また、LoRA の rank や学習率もモデルごとに違うので、純粋に基盤モデルだけの差とは言えません。</p>
<h2>系列 train なしの saihai-8b と他モデルとの比較</h2>
<p>最後に、系列 train を使わずに学習した LLM-jp 8B を、他の Decision モデルと比べてみました。ここでの「文化知識 4」は、JamC-QA、JCulture-MCQ、JMMLU Japan、SOBACO Culture の 4 タスクです。</p>
<table>
<thead>
<tr>
<th>モデル</th>
<th align="right">Task Avg</th>
<th align="right">日本語オリジナル 12</th>
<th align="right">文化知識 4</th>
<th align="right">翻訳・混在 7</th>
<th align="right">合成 8</th>
</tr>
</thead>
<tbody>
<tr>
<td>Jev 1.13</td>
<td align="right">56.33</td>
<td align="right">60.93</td>
<td align="right">47.29</td>
<td align="right">65.71</td>
<td align="right">62.57</td>
</tr>
<tr>
<td>Winnow 12B</td>
<td align="right">48.54</td>
<td align="right">52.20</td>
<td align="right">30.05</td>
<td align="right">47.87</td>
<td align="right">57.01</td>
</tr>
<tr>
<td><strong>saihai-8b (系列 train なし)</strong></td>
<td align="right">47.85</td>
<td align="right">55.38</td>
<td align="right">33.61</td>
<td align="right">46.34</td>
<td align="right">51.50</td>
</tr>
<tr>
<td>KnowLine Gen3</td>
<td align="right">46.41</td>
<td align="right">50.17</td>
<td align="right">29.14</td>
<td align="right">49.00</td>
<td align="right">50.37</td>
</tr>
<tr>
<td>Jebadiah 9B v2</td>
<td align="right">45.20</td>
<td align="right">45.73</td>
<td align="right">32.12</td>
<td align="right">51.22</td>
<td align="right">54.72</td>
</tr>
<tr>
<td>Clef Flash</td>
<td align="right">45.06</td>
<td align="right">51.48</td>
<td align="right">35.37</td>
<td align="right">51.25</td>
<td align="right">49.06</td>
</tr>
<tr>
<td>Imajev 4B 8k</td>
<td align="right">39.02</td>
<td align="right">43.24</td>
<td align="right">22.84</td>
<td align="right">45.33</td>
<td align="right">46.52</td>
</tr>
<tr>
<td>Tev1 4B</td>
<td align="right">37.23</td>
<td align="right">41.41</td>
<td align="right">20.16</td>
<td align="right">41.47</td>
<td align="right">44.62</td>
</tr>
</tbody>
</table>
<p>文化知識 4 は日本語オリジナル 12 の一部です。</p>
<p>系列 train を除いた場合でも、この 8 モデルの中では日本語オリジナル 12 タスクで Jev に次ぐ 2 位で、Winnow 12B (gemma-4-12B-it が大元) より高い結果でした。合成 8 タスクも Jev・Winnow・Jebadiah に次ぐ 4 位です。一方、総合値では Winnow が上ですし、文化知識 4 タスクだけなら Clef が上です。翻訳・混在 7 タスクでは 8 モデル中 6 位で、一般知識の問題ではむしろ他のモデルに負けています。「日本について何でも一番詳しい」とまで強く言える結果にはなりませんでした。</p>
<p>なお、ここでの「系列 train なし」は、追加学習から系列 train を除いたという意味です。評価データと意味的に重複するデータがないことや、基盤モデルの事前学習で触れていないことまでは確認していません。</p>
<h1>量子化と llama.cpp 対応</h1>
<p>saihai-8b の GGUF は BF16・Q8_0・Q6_K・Q4_K_M・Q3_K_M・Q2_K の 6 形式を配布しています。この 6 形式で、S1MB japanese-v1 の全 27 タスク・8,067 件を llama.cpp の native <code>/v1/systemone</code> で評価しました。入力は S1MB 標準の llama.cpp adapter で変換し、4 並列、1 slot あたり 8,192 tokens、cache 再利用ありと、6 形式とも同じ条件です。</p>
<table>
<thead>
<tr>
<th>形式</th>
<th align="right">サイズ (GB)</th>
<th align="right">Task Avg</th>
<th align="right">BF16 との差</th>
<th align="right">BF16 との argmax 一致率 (%)</th>
</tr>
</thead>
<tbody>
<tr>
<td>BF16</td>
<td align="right">17.19</td>
<td align="right">49.53</td>
<td align="right">0.00</td>
<td align="right">100.00</td>
</tr>
<tr>
<td>Q8_0</td>
<td align="right">9.13</td>
<td align="right">49.50</td>
<td align="right">-0.03</td>
<td align="right">99.03</td>
</tr>
<tr>
<td>Q6_K</td>
<td align="right">7.05</td>
<td align="right">49.24</td>
<td align="right">-0.29</td>
<td align="right">97.51</td>
</tr>
<tr>
<td>Q4_K_M</td>
<td align="right">5.30</td>
<td align="right">48.87</td>
<td align="right">-0.66</td>
<td align="right">92.10</td>
</tr>
<tr>
<td>Q3_K_M</td>
<td align="right">4.37</td>
<td align="right">46.98</td>
<td align="right">-2.56</td>
<td align="right">87.07</td>
</tr>
<tr>
<td>Q2_K</td>
<td align="right">3.50</td>
<td align="right">38.08</td>
<td align="right">-11.46</td>
<td align="right">71.63</td>
</tr>
</tbody>
</table>
<p>argmax 一致率は、最も確率が高い候補が GGUF の BF16 版と一致した割合で、正解率ではありません。また、Score は数値段階の期待値で採点するため、argmax が一致してもスコアが変わることがあります。</p>
<p>Q8_0 は BF16 との差が 0.03 点ほどで、総合値をほぼ維持しています。Q4_K_M でも低下は 0.66 点ほどですが、argmax 一致率は 92.10% でした。点数が近くても、確率をそのまま使う処理まで同じ挙動になるとは限らないですね。Q3_K_M は約 4.37 GB まで小さくなりますが低下は 2.56 点、Q2_K では 11.46 点と大きく下がりました。これを見ると、ほぼ同等の性能を維持できる Q8_0 や、ベンチマークレベルでは劣化がかなり少ない Q4_K_M あたりが、量子化モデルとしては使いやすそうですね。</p>
<p>速度と VRAM も測っています。RTX 5090 で、同じ 27 タスク・8,067 件を 4 並列で評価したときの処理速度と、GPU メモリ使用量の最大値です。</p>
<table>
<thead>
<tr>
<th>形式</th>
<th align="right">判断/秒</th>
<th align="right">BF16 比</th>
<th align="right">peak VRAM (GiB)</th>
</tr>
</thead>
<tbody>
<tr>
<td>BF16</td>
<td align="right">24.28</td>
<td align="right">1.00x</td>
<td align="right">19.22</td>
</tr>
<tr>
<td>Q8_0</td>
<td align="right">30.44</td>
<td align="right">1.25x</td>
<td align="right">12.39</td>
</tr>
<tr>
<td>Q6_K</td>
<td align="right">28.38</td>
<td align="right">1.17x</td>
<td align="right">10.64</td>
</tr>
<tr>
<td>Q4_K_M</td>
<td align="right">30.58</td>
<td align="right">1.26x</td>
<td align="right">9.21</td>
</tr>
<tr>
<td>Q3_K_M</td>
<td align="right">31.07</td>
<td align="right">1.28x</td>
<td align="right">8.43</td>
</tr>
<tr>
<td>Q2_K</td>
<td align="right">26.56</td>
<td align="right">1.09x</td>
<td align="right">7.70</td>
</tr>
</tbody>
</table>
<p>量子化すると BF16 より 1.1〜1.3 倍ほど速くなり、VRAM は Q8_0 で約 12 GiB、Q4_K_M なら 10 GiB を切ります。一方で、Q8_0 以下は速度にあまり差がなく、Q2_K はむしろ遅くなりました。速度面でも、Q8_0 か Q4_K_M あたりが選びやすそうです。</p>
<p>この速度は、HTTP 通信や採点・保存まで含めた評価全体の処理速度で、1 件あたりのレイテンシではありません。また、1 回だけの計測で、精度の評価とは別に実行しています (重みは配布版と同じですが、64K コンテキスト対応のメタデータ更新前の GGUF で計測しています)。VRAM はドライバなどを含めた観測値です。</p>
<p>なお、Transformers 版の Task Avg は 49.77、GGUF の BF16 版は 49.53 と少し差があります。これは、Transformers 版は saihai 独自の入力変換、GGUF 版は S1MB 標準 adapter の入力変換で評価していて、Score などの表現が異なるためで、量子化による差ではありません。</p>
<p>そのほかの補足です。</p>
<ul>
<li>コンテキスト長は 64K としていますが、今回の評価は短いタスクばかりなので、64K の長い入力での判断品質までは確認できていません。</li>
<li>計測には、llama.cpp の revision <code>3d65c90</code> に、LLM-jp tokenizer の修正 (<a href="https://github.com/ggml-org/llama.cpp/pull/28864">PR #28864</a>) のパッチを当てたものを使っています。この tokenizer の修正パッチを使わないと、若干 token のずれが発生します。将来的には llama.cpp に取り込まれると思います。</li>
</ul>
<h1>Decision モデルと、ベンチマークを作っての感想</h1>
<p><a href="https://huggingface.co/spaces/hotchpotch/S1MB-leaderboard?category=english-v1">S1MB の英語 leaderboard</a> では、すでに 個人や企業が独自に作った 100 以上の Decision モデルが評価されており、ベンチマーク上は Jev よりも性能の高いモデルも出てきています。また、ちょっとした性能のモデルなら、雑にファインチューニングするだけでも作れてしまいます。実際、自分も今回作ってみたのですが、パッと見ある程度うまく機能していそうなモデルは、性能の良い基盤モデルを使えば簡単に作ることができました。saihai-8b も、RTX 5090 1 枚でファインチューニングにかかった時間は 4 時間弱と、短時間で作れています。</p>
<p>ただ Jev の素晴らしいところは、汎化性能が高く、ほとんどの問題に対して適切な回答を選べていることだと思います。そしてこれは、S1MB をはじめ、現在出ているベンチマークでは、まだまだうまく計測できているとは言い難い状況です。TypeSafe AI は、Jev のプレビューリリース時の利用規約で、性能の誤解を招くためなのか、ベンチマーク結果の公開を NG としていました (現在の規約ではその条項はなくなりました)。また、CEO の Diogo Almeida 氏も X で以下のように述べています。</p>
<blockquote>
<p>there's a critical difference between benchmaxxed models and ones made by people who truly care about reliability that, by definition, doesn't show up on benchmarks</p>
<p>(we've somewhat learned this for string LLMs...)</p>
</blockquote>
<p><a href="https://x.com/CompleteSkeptic/status/2106883012856336539">https://x.com/CompleteSkeptic/status/2106883012856336539</a></p>
<p>ある側面だけを切り取ったベンチマークでは汎化性能が測れないので、そんなに意味がない、というのは私も同意見です。TypeSafe があらゆる質問に対する性能を測れるベンチマークを公開してくれれば良いのですが (社内にはあるのではないか、と私は勘繰っています)、そうすると「TypeSafe が考える Decision モデルのあらゆるユースケース」が露呈するわけで、先行者利益で走りたい今、わざわざそれを公開する選択はないのでしょう。</p>
<p>では S1MB japanese-v1 も意味がないのでは？という問いには、半分は yes、半分は no かなと思っています。特定の側面だけであっても、ある程度共通の指針で測れるベンチマークは有益です。ただ、それを鵜呑みにすると、本来とても重要な「汎化性能」を無視することになってしまうので、参考程度に見ていただけたらと思います。本当に必要な性能評価は、自分たちのユースケースでどれぐらいの性能が出るのかを測るベンチマークを、自前で用意することなのかなと。</p>
<p>また、Decision モデルの性能と推論コストのバランスを考えると、現在のスイートスポットは 4B あたりな気がしていますが、将来的には 1B 以下のモデルでも十分な性能が出るのではないか、と思っています。小さいモデル、とりわけエンコーダモデルが好きな身としては、小さなサイズで必要十分なモデルが作れると面白そうだなぁと感じています。今回の saihai-310m はまだその域には届いていませんが、その方向への一歩として公開しました。</p>
<h2>参考 URL</h2>
<ul>
<li><a href="https://zenn.dev/ivry/articles/65c1c4242e1156">日本語ベンチマークで Jev の性能を検証する</a></li>
<li><a href="https://huggingface.co/llm-jp/llm-jp-4.1-8b-thinking">基盤モデル: llm-jp-4.1-8b-thinking</a></li>
<li><a href="https://huggingface.co/llm-jp/llm-jp-4.1-32b-a3b-thinking">日本語合成データの生成モデル: llm-jp-4.1-32b-a3b-thinking</a></li>
<li><a href="https://github.com/hotchpotch/saihai">saihai 学習コード</a></li>
<li><a href="https://huggingface.co/datasets/hotchpotch/saihai-v1-dataset">saihai 学習データ</a></li>
<li><a href="https://secon.dev/entry/2026/09/30/100000-bekko-system-one-v0-release/">bekko-system-one-v0 の公開記事</a></li>
<li><a href="https://github.com/hotchpotch/bekko-system-one/blob/main/docs/saihai-v1-310m.md">saihai-310m の学習ドキュメント (bekko-system-one)</a></li>
<li><a href="https://huggingface.co/datasets/hotchpotch/saihai-v1-310m-dataset">saihai-310m 学習データ</a></li>
<li><a href="https://huggingface.co/cl-nagoya/ruri-v3-reranker-310m">saihai-310m の基盤モデル: ruri-v3-reranker-310m</a></li>
<li><a href="https://github.com/hotchpotch/S1MB">S1MB 評価コード</a></li>
<li><a href="https://huggingface.co/spaces/hotchpotch/S1MB-leaderboard?category=japanese-v1">S1MB 日本語 leaderboard</a></li>
<li><a href="https://huggingface.co/spaces/hotchpotch/S1MB-leaderboard?category=english-v1">S1MB 英語 leaderboard</a></li>
<li><a href="https://huggingface.co/datasets/hotchpotch/S1MB-english-v1">S1MB 英語ベンチマークデータ (english-v1)</a></li>
<li><a href="https://developers.openai.com/api/docs/guides/decisions">GPT-6 Luna: OpenAI Decisions API</a></li>
<li><a href="https://huggingface.co/datasets/hotchpotch/s1mb-result">S1MB 評価結果</a></li>
<li><a href="https://huggingface.co/perplexity-ai/pplx-decider-v1-27b">pplx-decider-v1-27b</a></li>
<li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/server-decision.cpp">llama.cpp の Decision readout 実装</a></li>
</ul>]]></description>
            <link>https://secon.dev/entry/2026/10/15/100000-saihai-japanese-decision-benchmark</link>
            <guid isPermaLink="false">/entry/2026/10/15/100000-saihai-japanese-decision-benchmark</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Thu, 15 Oct 2026 01:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月14日]]></title>
            <description><![CDATA[<p>体調が若干悪めなので、1日家で過ごす。</p>
<hr>
<p>そよ風と木。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_L1005849.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_L1005849.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/14/210000</link>
            <guid isPermaLink="false">/entry/2026/10/14/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Wed, 14 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月13日]]></title>
            <description><![CDATA[<p>ベコ氏を送った後、那須パラダイスヴィレッジで作業。青空で気持ち良いね。本格的なハロウィン仕様なので、至る所からゾンビの声が聞こえてくるのは、作業している身としてはだいぶ耳障りであったが…。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003602.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003602.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/13/210000</link>
            <guid isPermaLink="false">/entry/2026/10/13/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Tue, 13 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月12日]]></title>
            <description><![CDATA[<p>ベットでゴロゴロしていると、ベコ氏がクローゼットからパッパーと言いながら、私のタイパンツ・パーカー・ズボン・ジャケット・手袋等々を一つ一つ運んでくる。はぁ〜〜〜〜かわいすぎでしょ。</p>
<hr>
<p>連休も三日目になると疲れが溜まっていて、遠出はせず、那珂川河畔公園へ。遊具には子供達がいっぱい。ベコ氏も遊べるようになってきて嬉しいね。</p>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003589.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003589.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003597.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003597.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/12/210000</link>
            <guid isPermaLink="false">/entry/2026/10/12/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Mon, 12 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月11日]]></title>
            <description><![CDATA[<p>下郷町へ。養鱒公園で開催のマルシェ、Leafの里に参加するのだ。</p>
<p>若干遠回りになるが、塩原を向けて南会津、西郷村というルート。山間のドライブがしたく、この道はお気に入りの道の一つ。快晴でとても良い天気、25度という温度、10月半ばの山間というのに、Tシャツでちょうど良い気候。夏を感じる。</p>
<p>そして初めて行く、養鱒公園は山々に囲まれ、水がとても綺麗。最高のロケーションじゃん！鱒の養殖をしていて、横では家族向けのニジマスの釣り堀。釣ったマスは持ち帰りもできるし、その場で塩焼きやフライにもしてくれる。ベコ氏がもうちょっと大きくなったらやりたいね。</p>
<p>Leafの里は、お馴染みのドモンパンやnepuriさんらが出店する、というので知ったので、それらのお店を巡ったり(初めてドモンさんにお会いした)、美味しいパンやコーヒーを飲んだり、以前してもらった短時間のマッサージをやってもらったりと最高。昭和チックなゴーカートもあって、乗るとベコ氏は大はしゃぎ。はー楽しかったね。</p>
<p>ほんと最高の天気、ロケーション、イベント。写真屋さんも来ており、最高だった思い出として、その場で家族写真も撮ってもらったりと、いたりしつくせり。最高の1日だったなぁ。語彙がないので最高を連発しまくるが、そんな1日であった。</p>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003543.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003543.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003556.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003556.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003564.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003564.webp" class="photo" itemprop="image" /></a></span></div>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003536.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003536.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003532.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003532.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003524.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003524.webp" class="photo" itemprop="image" /></a></span></div>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003531.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003531.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003579.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003579.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261014_R0003582.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261014_R0003582.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/11/210000</link>
            <guid isPermaLink="false">/entry/2026/10/11/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Sun, 11 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月10日]]></title>
            <description><![CDATA[<p>宇都宮動物園へ。高速降りてすぐなので、家からかなり近く感じる。遊園地も併設されていて、小さくこぢんまりとしているが、小さな子供には十分な広さ。</p>
<p>とりわけ動物の餌やりで、キリンが柵の上から首を出してきて、長いベロで手に持った野菜を器用に食べる。大迫力。小さい子供は結構怖くて泣いていたりしたのだが、ベコ氏は最初はびっくりしつつも、餌を持った短い手を上に伸ばし、餌やりを楽しんでいた。</p>
<p>またモノレール遊具、古いアンパンマンの乗り物、その他ただの大きなリスの置物など、なんでも楽しんでいた。動物が楽しい！と言うより、知らないものはなんでも楽しめるんだよなぁ。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261010_R0003494.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261010_R0003494.webp" class="photo" itemprop="image" /></a></span></div>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261010_R0003486.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261010_R0003486.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261010_R0003506.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261010_R0003506.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>その後、道の駅である宇都宮ロマンチック村へ。以前来たときは閑散としていたが、さすが三連休でかなりの混み用。餃子関連などを買って帰る。</p>
<hr>
<p>宇都宮動物園のGoogle Mapsのレビューに、海外からの★1評価が多く付いていて、なんだろうと思って調べてみた。どうやら、PETA（動物の権利擁護団体）が、<a href="https://secure.petaasia.com/page/136252/action/1">象の宮子を解放して</a>というキャンペーンを行っていることが背景にあるようだ。</p>
<p>これをきっかけにエーアイ氏と対話し、動物福祉や動物の権利について少し調べてみた。象の単独飼育には確かに福祉上の懸念がある。ただ、長年暮らした環境から別の施設へ移すことが、必ずしも宮子にとって良い結果になるとは限らない。</p>
<p>動物園側も、高齢になった宮子(現在53歳かな、野生の象は70歳ぐらいまで生きるらしい)の飼育環境を改善するためにクラウドファンディングで2,000万円以上を集め、<a href="https://readyfor.jp/projects/miyako/accomplish_report">プールを整備したりレントゲンを購入したり</a>などの取り組みを行っている。動物園そのものの是非も含め、なかなか簡単に答えの出る問題ではないな、と。</p>
<p>PETAへの賛否はともかく、動物福祉について少し考えるきっかけになったなぁ。</p>]]></description>
            <link>https://secon.dev/entry/2026/10/10/210000</link>
            <guid isPermaLink="false">/entry/2026/10/10/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月9日]]></title>
            <description><![CDATA[<p>ベコ氏、パパはよく呼ぶのだけど、ママは当たり前の存在だからなのか、あえて呼ぶことがほとんどなかった。のだけど、昨日あたりから「ママと呼んでいいのか！」と気付いたのか、母親をママママ言うように。</p>
<p>親が普段使っているものを、ママパパと呼ぶ。かわいい。母のiPhoneは「ママ」と呼ぶようになり、父の靴下（よくその辺に脱いである）は「パパ」である。</p>
<hr>
<p>そろそろ sakura の VPS の一年契約の更新の時期、というわけで動いていた諸々(このサイトの更新とかね)を自宅サーバに移す。以前は、いちいちちゃんと確認するの、めんどくさいからなーというコストが発生していたのだが、エーアイ氏によろ、で済んで驚くほど楽に終わってしまった。</p>
<hr>
<p>午前中寒く、暖かくなるものが食べたいと、森商店での味噌ラーメン。ただ、昼過ぎには気温も暖かくなってしまった。よりはまた寒くなる。寒暖差が激しく、季節の移り目を感じる。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261010_RX009604.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261010_RX009604.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>庭の雑草、クローバーかなと思っていたら、カタバミであった。雑草、割と好きなんだけど、知識が全然ないんだよなぁ。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261010_RX009601.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261010_RX009601.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/09/210000</link>
            <guid isPermaLink="false">/entry/2026/10/09/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Fri, 09 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月8日]]></title>
            <description><![CDATA[<p>昨晩、夜中暗い中、家のガラスの扉に顔面から激突(暗いので、ドアがあいていたと思った)し、めちゃくちゃ痛いし大きな音はなるし、自分も「痛っ！！！」と声を上げるし、寝ていたベコ氏は泣き出すし、そのため妻がまた寝かしつけることになるし、というみんな辛い悲しい出来事があった。</p>
<hr>
<p>いい天気の日。またずっとエーアイ中毒だったしで、気分を変えに外に。今回は那須平成の森フィールドセンターから駒止の滝までの散歩。往復1.5時間ぐらいのちょうど良い散歩コースだ。那須平成の森フィールドセンターはフリーWiFi(150Mbsp 程度は出ていた)が使え、トイレもあるし野外に机もあるしで、意外と良い作業場所にもなるかもしれないなぁ。</p>
<p>茶臼岳も綺麗に見える。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261008_L1005802.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261008_L1005802.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>駒止の滝までは、山林を歩く。小学生が遠足（フィールドワーク）できていて賑やか。「あーなんか辺な人(私)がいる〜〜〜」と言われる。たしかに、みんなと格好が違うもんね。</p>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261008_L1005821.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261008_L1005821.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261008_L1005815.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261008_L1005815.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>山を歩くと、すれ違う人と「こんにちわ」と声かけの挨拶。最近何かで読んだが、挨拶するだけで満たされるらしい。実際、それだけで気持ちが良いんだよね。山の中を歩けば満たされまくりなのでは！？</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261008_L1005832.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261008_L1005832.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>陽が当たる場所は暑いぐらいの天気。ところどころ、紅葉の赤も見えるように。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261008_L1005834.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261008_L1005834.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>これは三本槍岳かなー。以前三本槍岳に登った時は那須ゴンドラで中腹までワープしたのだが、今は那須ゴンドラも閉業してしまったから、中腹まですら、1時間以上歩かなければならない。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261008_L1005839.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261008_L1005839.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>駒止の滝、初めて来た。うおー青い！綺麗じゃん〜。紅葉の季節はもっと綺麗なんだろうなぁ。車なら滝の横の駐車場まで来れちゃうけど、1時間弱を歩いてきたので、より有り難さがますね。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261008_L1005841.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261008_L1005841.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>ささっと戻って(帰りは下りで楽)、THE昭和なお店の大衆食堂さつきで遅めの昼食。思ったより賑わっていて（たまたまだったかもしれないが）、ご飯がなくなったので麺類のみ、とのことだったのタンメンを。お店の夫婦のお二人も良い人だったし、この辺は昼食場所がここしかないから、長く続くと良いな。</p>
<p>コロナ時に作ったのだと思うが、入り口に「老舗のため すきま風 換気良好」というプレートがあって、これまた味がある。</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261008_L1005848.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261008_L1005848.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/08/210000</link>
            <guid isPermaLink="false">/entry/2026/10/08/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Thu, 08 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月7日]]></title>
            <description><![CDATA[<p>年に一度(だった気がする)の、みるるの入れ替え、色々大字が変わる。なんと阿賀沢紅茶先生の作品「正反対な君と僕」のあのセリフじゃ〜〜〜〜ん！！本来は若者向けなんだろうが、私、おじさん大喜びですね。</p>
<div class="photos photos-medium"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261007_R0003475.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261007_R0003475.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>昼食はラーメンきまま。澄んだスープ！</p>
<div class="photos photos-small"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261007_R0003472.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261007_R0003472.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>更新するパスポートを受け取りに市役所へ。手続きはマイナアプリからサクッとでき、あとは受け取るだけで楽だった。こういう便利さ、徐々にデジダル化が進んでいるのだなぁ、と実感する。</p>]]></description>
            <link>https://secon.dev/entry/2026/10/07/210000</link>
            <guid isPermaLink="false">/entry/2026/10/07/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2026年10月6日]]></title>
            <description><![CDATA[<p>お店の存在は知りつつも、一度も行ったことがなかった和食屋 かねやまへ。天ぷら定食おいし〜。和食が食べられる店、意外と少ないんだよなぁ。和食ラインナップが一軒増えて嬉しいね。</p>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261007_RX009575.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261007_RX009575.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261007_RX009579.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261007_RX009579.webp" class="photo" itemprop="image" /></a></span></div>
<hr>
<p>ベコ氏の保育園の横にレストランができたぞ〜と、お迎えの帰りにお茶。デザートもハーブ茶も美味しかったなぁ。ベコ氏は枯れた大きな紫陽花の周りで大はしゃぎする。おお、それに興味を持つのか、というポイントが時々予想不能でかわいいね。</p>
<div class="photos photos-columns"><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261007_RX009591.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261007_RX009591.webp" class="photo" itemprop="image" /></a></span><span itemscope="" itemtype="http://schema.org/Photograph"><a href="https://storage.googleapis.com/secons-site-images/photo/large/20261007_RX009582.webp"><img src="https://storage.googleapis.com/secons-site-images/photo/medium/20261007_RX009582.webp" class="photo" itemprop="image" /></a></span></div>]]></description>
            <link>https://secon.dev/entry/2026/10/06/210000</link>
            <guid isPermaLink="false">/entry/2026/10/06/210000</guid>
            <dc:creator><![CDATA[secondlife / @hotchpotch / Yuichi Tateno]]></dc:creator>
            <pubDate>Tue, 06 Oct 2026 12:00:00 GMT</pubDate>
        </item>
    </channel>
</rss>