[机器翻译] 记一次多语言机器翻译模型的训练

文章目录

  • 前言
  • 数据准备
    • 数据下载
    • 数据预处理
  • 模型训练
  • 补充
    • 补充一:Key error while accessing batch_iterator.first_batch
  • 参考

前言

笔者尝试复现LaSS工作,由于该工作所做的第一步就是训练一个多语言机器翻译模型,故记录在此,本文主要内容是数据准备的步骤。

数据准备

实验使用iwslt 14中的8个以英语为中心的语言对,完成16个方向的多语言机器翻译。目前使用该数据集是因为其数据量相对较小,模型训练速度较快,笔者觉得比较适合用于机器翻译上手、比较不同模型性能的优劣。数据集的统计信息如下图所示:
[机器翻译] 记一次多语言机器翻译模型的训练_第1张图片
下面介绍数据的下载和预处理。假设现在的所在目录为/data/syxu/data/data_store/iwslt14

数据下载

从https://wit3.fbk.eu/2014-01链接中下载得到2014-01.tgz文件夹,保存至当前目录,tar zxvf 2014-01.tgz进行文件解压缩。2014-01中的内容如下:
[机器翻译] 记一次多语言机器翻译模型的训练_第2张图片
使用cp -r 2014-01/texts/*/en/*-en.tgz .将需要使用到的压缩文件提取到当前目录,得到:
[机器翻译] 记一次多语言机器翻译模型的训练_第3张图片

数据预处理

数据预处理部分的脚本代码参照LaSS和multilingual-kd-pytorch。
具体来说,首先在当前目录下创建预处理脚本文件:prepare-iwslt14.sh和preprocess_multilingual.py,这两个文件各自的代码如下:

  • prepare-iwslt14.sh
#!/usr/bin/env bash
#
# Adapted from https://github.com/facebookresearch/MIXER/blob/master/prepareData.sh
echo 'Cloning Moses github repository (for tokenization scripts)...'
git clone https://github.com/moses-smt/mosesdecoder.git

echo 'Cloning Subword NMT repository (for BPE pre-processing)...'
git clone https://github.com/rsennrich/subword-nmt.git

SCRIPTS=mosesdecoder/scripts
TOKENIZER=$SCRIPTS/tokenizer/tokenizer.perl
LC=$SCRIPTS/tokenizer/lowercase.perl
CLEAN=$SCRIPTS/training/clean-corpus-n.perl
BPEROOT=subword-nmt
BPE_TOKENS=30000
prep=iwslt14.tokenized
tmp=$prep/tmp
orig=orig
rm -r $orig
rm -r $tmp
rm -r $prep
mkdir -p $orig $tmp $prep

for src in ar de es fa he it nl pl; do
    tgt=en
    lang=$src-en

    echo "pre-processing train data..."
    for l in $src $tgt; do
        if [[ ! -f $src-en.tgz ]]; then
            wget https://wit3.fbk.eu/archive/2014-01//texts/$src/en/$src-en.tgz
        fi
        cd $orig
        tar zxvf ../$src-en.tgz
        cd ..

        f=train.tags.$lang.$l
        tok=train.tags.$lang.tok.$l

        cat $orig/$lang/$f | \
        grep -v '' | \
        grep -v '' | \
        grep -v '' | \
        sed -e 's///g'</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
        <span class="token function">sed</span> -e <span class="token string">'s/<\/title>//g'</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
        <span class="token function">sed</span> -e <span class="token string">'s/<description>//g'</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
        <span class="token function">sed</span> -e <span class="token string">'s/<\/description>//g'</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
        perl <span class="token variable">$TOKENIZER</span> -threads <span class="token number">8</span> -l <span class="token variable">$l</span> <span class="token operator">></span> <span class="token variable">$tmp</span>/<span class="token variable">$tok</span>
        <span class="token builtin class-name">echo</span> <span class="token string">""</span>
    <span class="token keyword">done</span>
    perl <span class="token variable">$CLEAN</span> -ratio <span class="token number">1.5</span> <span class="token variable">$tmp</span>/train.tags.<span class="token variable">$lang</span>.tok <span class="token variable">$src</span> <span class="token variable">$tgt</span> <span class="token variable">$tmp</span>/train.tags.<span class="token variable">$lang</span>.clean <span class="token number">1</span> <span class="token number">175</span>
    <span class="token keyword">for</span> <span class="token for-or-select variable">l</span> <span class="token keyword">in</span> <span class="token variable">$src</span> <span class="token variable">$tgt</span><span class="token punctuation">;</span> <span class="token keyword">do</span>
        perl <span class="token variable">$LC</span> <span class="token operator"><</span> <span class="token variable">$tmp</span>/train.tags.<span class="token variable">$lang</span>.clean.<span class="token variable">$l</span> <span class="token operator">></span> <span class="token variable">$tmp</span>/train.tags.<span class="token variable">$lang</span><span class="token builtin class-name">.</span><span class="token variable">$l</span>
    <span class="token keyword">done</span>

    <span class="token builtin class-name">echo</span> <span class="token string">"pre-processing valid/test data..."</span>
    <span class="token keyword">for</span> <span class="token for-or-select variable">l</span> <span class="token keyword">in</span> <span class="token variable">$src</span> <span class="token variable">$tgt</span><span class="token punctuation">;</span> <span class="token keyword">do</span>
        <span class="token keyword">for</span> <span class="token for-or-select variable">o</span> <span class="token keyword">in</span> <span class="token variable"><span class="token variable">`</span><span class="token function">ls</span> $orig/$lang/IWSLT14.TED*.$l.xml<span class="token variable">`</span></span><span class="token punctuation">;</span> <span class="token keyword">do</span>
        <span class="token assign-left variable">fname</span><span class="token operator">=</span><span class="token variable">${o<span class="token operator">##</span>*<span class="token operator">/</span>}</span>
        <span class="token assign-left variable">f</span><span class="token operator">=</span><span class="token variable">$tmp</span>/<span class="token variable">${fname<span class="token operator">%</span>.*}</span>
        <span class="token builtin class-name">echo</span> <span class="token variable">$o</span> <span class="token variable">$f</span>
        <span class="token function">grep</span> <span class="token string">'<seg id'</span> <span class="token variable">$o</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
            <span class="token function">sed</span> -e <span class="token string">'s/<seg id="[0-9]*">\s*//g'</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
            <span class="token function">sed</span> -e <span class="token string">'s/\s*<\/seg>\s*//g'</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
            <span class="token function">sed</span> -e <span class="token string">"s/\’/\'/g"</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
        perl <span class="token variable">$TOKENIZER</span> -threads <span class="token number">8</span> -l <span class="token variable">$l</span> <span class="token operator">|</span> <span class="token punctuation">\</span>
        perl <span class="token variable">$LC</span> <span class="token operator">></span> <span class="token variable">$f</span>
        <span class="token builtin class-name">echo</span> <span class="token string">""</span>
        <span class="token keyword">done</span>
    <span class="token keyword">done</span>


    <span class="token builtin class-name">echo</span> <span class="token string">"creating train, valid, test..."</span>
    <span class="token keyword">for</span> <span class="token for-or-select variable">l</span> <span class="token keyword">in</span> <span class="token variable">$src</span> <span class="token variable">$tgt</span><span class="token punctuation">;</span> <span class="token keyword">do</span>
        <span class="token function">awk</span> <span class="token string">'{if (NR%23 == 0)  print $0; }'</span> <span class="token variable">$tmp</span>/train.tags.<span class="token variable">$src</span>-<span class="token variable">$tgt</span><span class="token builtin class-name">.</span><span class="token variable">$l</span> <span class="token operator">></span> <span class="token variable">$tmp</span>/valid.en-<span class="token variable">$src</span><span class="token builtin class-name">.</span><span class="token variable">$l</span>
        <span class="token function">awk</span> <span class="token string">'{if (NR%23 != 0)  print $0; }'</span> <span class="token variable">$tmp</span>/train.tags.<span class="token variable">$src</span>-<span class="token variable">$tgt</span><span class="token builtin class-name">.</span><span class="token variable">$l</span> <span class="token operator">></span> <span class="token variable">$tmp</span>/train.en-<span class="token variable">$src</span><span class="token builtin class-name">.</span><span class="token variable">$l</span>

        <span class="token function">cat</span> <span class="token variable">$tmp</span>/IWSLT14.TED.dev2010.<span class="token variable">$src</span>-<span class="token variable">$tgt</span><span class="token builtin class-name">.</span><span class="token variable">$l</span> <span class="token punctuation">\</span>
            <span class="token variable">$tmp</span>/IWSLT14.TEDX.dev2012.<span class="token variable">$src</span>-<span class="token variable">$tgt</span><span class="token builtin class-name">.</span><span class="token variable">$l</span> <span class="token punctuation">\</span>
            <span class="token variable">$tmp</span>/IWSLT14.TED.tst2010.<span class="token variable">$src</span>-<span class="token variable">$tgt</span><span class="token builtin class-name">.</span><span class="token variable">$l</span> <span class="token punctuation">\</span>
            <span class="token variable">$tmp</span>/IWSLT14.TED.tst2011.<span class="token variable">$src</span>-<span class="token variable">$tgt</span><span class="token builtin class-name">.</span><span class="token variable">$l</span> <span class="token punctuation">\</span>
            <span class="token variable">$tmp</span>/IWSLT14.TED.tst2012.<span class="token variable">$src</span>-<span class="token variable">$tgt</span><span class="token builtin class-name">.</span><span class="token variable">$l</span> <span class="token punctuation">\</span>
            <span class="token operator">></span> <span class="token variable">$tmp</span>/test.en-<span class="token variable">$src</span><span class="token builtin class-name">.</span><span class="token variable">$l</span>
    <span class="token keyword">done</span>

    <span class="token assign-left variable">TRAIN</span><span class="token operator">=</span><span class="token variable">$tmp</span>/train.all
    <span class="token assign-left variable">BPE_CODE</span><span class="token operator">=</span><span class="token variable">$prep</span>/code
    <span class="token function">rm</span> -f <span class="token variable">$TRAIN</span>
    <span class="token keyword">for</span> <span class="token for-or-select variable">l</span> <span class="token keyword">in</span> <span class="token variable">$src</span> <span class="token variable">$tgt</span><span class="token punctuation">;</span> <span class="token keyword">do</span>
        <span class="token function">cat</span> <span class="token variable">$tmp</span>/train.en-<span class="token variable">$src</span><span class="token builtin class-name">.</span><span class="token variable">$l</span> <span class="token operator">>></span> <span class="token variable">$TRAIN</span>
    <span class="token keyword">done</span>
<span class="token keyword">done</span>
<span class="token builtin class-name">echo</span> <span class="token string">"learn_bpe.py on <span class="token variable">${TRAIN}</span>..."</span>
python <span class="token variable">$BPEROOT</span>/learn_bpe.py -s <span class="token variable">$BPE_TOKENS</span> <span class="token operator"><</span> <span class="token variable">$TRAIN</span> <span class="token operator">></span> <span class="token variable">$BPE_CODE</span>

<span class="token keyword">for</span> <span class="token for-or-select variable">src</span> <span class="token keyword">in</span> ar de es fa he it <span class="token function">nl</span> pl<span class="token punctuation">;</span> <span class="token keyword">do</span>
    <span class="token keyword">for</span> <span class="token for-or-select variable">L</span> <span class="token keyword">in</span> <span class="token variable">$src</span> <span class="token variable">$tgt</span><span class="token punctuation">;</span> <span class="token keyword">do</span>
        <span class="token keyword">for</span> <span class="token for-or-select variable">f</span> <span class="token keyword">in</span> train.en-<span class="token variable">$src</span><span class="token builtin class-name">.</span><span class="token variable">$L</span> valid.en-<span class="token variable">$src</span><span class="token builtin class-name">.</span><span class="token variable">$L</span> test.en-<span class="token variable">$src</span><span class="token builtin class-name">.</span><span class="token variable">$L</span><span class="token punctuation">;</span> <span class="token keyword">do</span>
            <span class="token builtin class-name">echo</span> <span class="token string">"apply_bpe.py to <span class="token variable">${f}</span>..."</span>
            python <span class="token variable">$BPEROOT</span>/apply_bpe.py -c <span class="token variable">$BPE_CODE</span> <span class="token operator"><</span> <span class="token variable">$tmp</span>/<span class="token variable">$f</span> <span class="token operator">></span> <span class="token variable">$prep</span>/<span class="token variable">$f</span>
        <span class="token keyword">done</span>
    <span class="token keyword">done</span>
<span class="token keyword">done</span>

<span class="token function">rm</span> -r text
<span class="token function">mkdir</span> -p text/train_data
<span class="token function">mkdir</span> -p text/valid_data
<span class="token function">mkdir</span> -p text/test_data
<span class="token function">cp</span> iwslt14.tokenized/train.en-* text/train_data/
<span class="token function">cp</span> iwslt14.tokenized/valid.en-* text/valid_data/
<span class="token function">cp</span> iwslt14.tokenized/test.en-* text/test_data/
<span class="token builtin class-name">cd</span> <span class="token punctuation">..</span>
python iwslt14/preprocess_multilingual.py --pref<span class="token operator">=</span>iwslt14/  --joined-dictionary
</code></pre> 
  <ul> 
   <li>preprocess_multilingual.py</li> 
  </ul> 
  <pre><code class="prism language-python"><span class="token comment">#!/usr/bin/env python3</span>
<span class="token comment"># Copyright (c) 2017-present, Facebook, Inc.</span>
<span class="token comment"># All rights reserved.</span>
<span class="token comment">#</span>
<span class="token comment"># This source code is licensed under the license found in the LICENSE file in</span>
<span class="token comment"># the root directory of this source tree. An additional grant of patent rights</span>
<span class="token comment"># can be found in the PATENTS file in the same directory.</span>
<span class="token triple-quoted-string string">"""
Data pre-processing: build vocabularies and binarize training data.
"""</span>

<span class="token keyword">import</span> argparse
<span class="token keyword">import</span> glob
<span class="token keyword">import</span> json
<span class="token keyword">import</span> random
<span class="token keyword">from</span> collections <span class="token keyword">import</span> Counter
<span class="token keyword">from</span> itertools <span class="token keyword">import</span> zip_longest
<span class="token keyword">import</span> os
<span class="token keyword">import</span> shutil

<span class="token keyword">from</span> fairseq<span class="token punctuation">.</span>data <span class="token keyword">import</span> indexed_dataset<span class="token punctuation">,</span> dictionary
<span class="token keyword">from</span> fairseq<span class="token punctuation">.</span>tokenizer <span class="token keyword">import</span> Tokenizer<span class="token punctuation">,</span> tokenize_line
<span class="token keyword">from</span> multiprocessing <span class="token keyword">import</span> Pool<span class="token punctuation">,</span> Manager<span class="token punctuation">,</span> Process


<span class="token keyword">def</span> <span class="token function">get_parser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    parser <span class="token operator">=</span> argparse<span class="token punctuation">.</span>ArgumentParser<span class="token punctuation">(</span><span class="token punctuation">)</span>
    parser<span class="token punctuation">.</span>add_argument<span class="token punctuation">(</span><span class="token string">'--pref'</span><span class="token punctuation">,</span> metavar<span class="token operator">=</span><span class="token string">'FP'</span><span class="token punctuation">,</span> default<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> <span class="token builtin">help</span><span class="token operator">=</span><span class="token string">'data prefix'</span><span class="token punctuation">)</span>
    parser<span class="token punctuation">.</span>add_argument<span class="token punctuation">(</span><span class="token string">'--no-dict'</span><span class="token punctuation">,</span> action<span class="token operator">=</span><span class="token string">'store_true'</span><span class="token punctuation">,</span> <span class="token builtin">help</span><span class="token operator">=</span><span class="token string">'do not build dictionary'</span><span class="token punctuation">)</span>
    parser<span class="token punctuation">.</span>add_argument<span class="token punctuation">(</span><span class="token string">'--nwordssrc'</span><span class="token punctuation">,</span> metavar<span class="token operator">=</span><span class="token string">'N'</span><span class="token punctuation">,</span> default<span class="token operator">=</span><span class="token number">65536</span><span class="token punctuation">,</span> <span class="token builtin">type</span><span class="token operator">=</span><span class="token builtin">int</span><span class="token punctuation">,</span> <span class="token builtin">help</span><span class="token operator">=</span><span class="token string">'number of target words to retain'</span><span class="token punctuation">)</span>
    parser<span class="token punctuation">.</span>add_argument<span class="token punctuation">(</span><span class="token string">'--padding-factor'</span><span class="token punctuation">,</span> metavar<span class="token operator">=</span><span class="token string">'N'</span><span class="token punctuation">,</span> default<span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token builtin">type</span><span class="token operator">=</span><span class="token builtin">int</span><span class="token punctuation">,</span>
                        <span class="token builtin">help</span><span class="token operator">=</span><span class="token string">'Pad dictionary size to be multiple of N'</span><span class="token punctuation">)</span>
    parser<span class="token punctuation">.</span>add_argument<span class="token punctuation">(</span><span class="token string">'--joined-dictionary'</span><span class="token punctuation">,</span> action<span class="token operator">=</span><span class="token string">'store_true'</span><span class="token punctuation">,</span> <span class="token builtin">help</span><span class="token operator">=</span><span class="token string">'Generate joined dictionary for en-xx'</span><span class="token punctuation">)</span>
    parser<span class="token punctuation">.</span>add_argument<span class="token punctuation">(</span><span class="token string">'--expert'</span><span class="token punctuation">,</span> default<span class="token operator">=</span><span class="token string">''</span><span class="token punctuation">,</span> <span class="token builtin">type</span><span class="token operator">=</span><span class="token builtin">str</span><span class="token punctuation">)</span>
    parser<span class="token punctuation">.</span>add_argument<span class="token punctuation">(</span><span class="token string">'--workers'</span><span class="token punctuation">,</span> metavar<span class="token operator">=</span><span class="token string">'N'</span><span class="token punctuation">,</span> default<span class="token operator">=</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token builtin">type</span><span class="token operator">=</span><span class="token builtin">int</span><span class="token punctuation">,</span> <span class="token builtin">help</span><span class="token operator">=</span><span class="token string">'number of parallel workers'</span><span class="token punctuation">)</span>
    <span class="token comment"># parser.add_argument('--workers', metavar='N', default=os.cpu_count(), type=int, help='number of parallel workers')</span>
    <span class="token keyword">return</span> parser


<span class="token keyword">def</span> <span class="token function">main</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span>
    random<span class="token punctuation">.</span>seed<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>

    destdir <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>args<span class="token punctuation">.</span>pref<span class="token punctuation">,</span> <span class="token string">'data-bin'</span> <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token string">''</span> <span class="token keyword">if</span> args<span class="token punctuation">.</span>expert <span class="token operator">==</span> <span class="token string">''</span> <span class="token keyword">else</span> <span class="token string">'/'</span> <span class="token operator">+</span> args<span class="token punctuation">.</span>expert<span class="token punctuation">)</span><span class="token punctuation">)</span>
    os<span class="token punctuation">.</span>makedirs<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> exist_ok<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>
    dict_path <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string">'dict.txt'</span><span class="token punctuation">)</span>

    textdir <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>args<span class="token punctuation">.</span>pref<span class="token punctuation">,</span> <span class="token string">'text'</span><span class="token punctuation">)</span>
    train_dir <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>textdir<span class="token punctuation">,</span> <span class="token string">'train_data'</span><span class="token punctuation">)</span>
    test_dir <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>textdir<span class="token punctuation">,</span> <span class="token string">'test_data'</span><span class="token punctuation">)</span>
    valid_dir <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>textdir<span class="token punctuation">,</span> <span class="token string">'valid_data'</span><span class="token punctuation">)</span>
    <span class="token comment"># if args.expert != '':</span>
    <span class="token comment"># train_files = glob.glob('{}/train.{}-en.*.e'.format(train_dir, args.expert)) + \</span>
    <span class="token comment">#               glob.glob('{}/train.en-{}.*.e'.format(train_dir, args.expert))</span>
    <span class="token comment"># pass</span>
    <span class="token comment"># else:</span>
    train_files <span class="token operator">=</span> glob<span class="token punctuation">.</span>glob<span class="token punctuation">(</span><span class="token string">'{}/train.*-*.*'</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>train_dir<span class="token punctuation">)</span><span class="token punctuation">)</span>
    train_files <span class="token operator">=</span> <span class="token punctuation">[</span>f <span class="token keyword">for</span> f <span class="token keyword">in</span> train_files <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>f<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
    test_files <span class="token operator">=</span> glob<span class="token punctuation">.</span>glob<span class="token punctuation">(</span><span class="token string">'{}/test.*-*.*'</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>test_dir<span class="token punctuation">)</span><span class="token punctuation">)</span>
    test_files <span class="token operator">=</span> <span class="token punctuation">[</span>f <span class="token keyword">for</span> f <span class="token keyword">in</span> test_files <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>f<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
    valid_files <span class="token operator">=</span> glob<span class="token punctuation">.</span>glob<span class="token punctuation">(</span><span class="token string">'{}/valid.*-*.*'</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>valid_dir<span class="token punctuation">)</span><span class="token punctuation">)</span>
    valid_files <span class="token operator">=</span> <span class="token punctuation">[</span>f <span class="token keyword">for</span> f <span class="token keyword">in</span> valid_files <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>f<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
    lng_pairs <span class="token operator">=</span> <span class="token builtin">set</span><span class="token punctuation">(</span><span class="token punctuation">[</span>f<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">"."</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token keyword">for</span> f <span class="token keyword">in</span> <span class="token punctuation">(</span>train_files <span class="token operator">+</span> test_files <span class="token operator">+</span> valid_files<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span>train_files<span class="token punctuation">,</span> test_files<span class="token punctuation">,</span> valid_files<span class="token punctuation">,</span> lng_pairs<span class="token punctuation">)</span>

    <span class="token keyword">def</span> <span class="token function">build_dictionary</span><span class="token punctuation">(</span>filenames<span class="token punctuation">)</span><span class="token punctuation">:</span>
        d <span class="token operator">=</span> dictionary<span class="token punctuation">.</span>Dictionary<span class="token punctuation">(</span><span class="token punctuation">)</span>
        <span class="token keyword">for</span> filename <span class="token keyword">in</span> filenames<span class="token punctuation">:</span>
            Tokenizer<span class="token punctuation">.</span>add_file_to_dictionary<span class="token punctuation">(</span>filename<span class="token punctuation">,</span> d<span class="token punctuation">,</span> tokenize_line<span class="token punctuation">,</span> args<span class="token punctuation">.</span>workers<span class="token punctuation">)</span>
        <span class="token keyword">return</span> d

    tgt_dict_path <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string">'dict.tgt.txt'</span><span class="token punctuation">)</span>
    <span class="token keyword">if</span> <span class="token keyword">not</span> args<span class="token punctuation">.</span>no_dict<span class="token punctuation">:</span>
        <span class="token keyword">if</span> args<span class="token punctuation">.</span>joined_dictionary<span class="token punctuation">:</span>
            src_dict <span class="token operator">=</span> build_dictionary<span class="token punctuation">(</span>train_files<span class="token punctuation">)</span>
            src_dict<span class="token punctuation">.</span>finalize<span class="token punctuation">(</span>
                nwords<span class="token operator">=</span>args<span class="token punctuation">.</span>nwordssrc<span class="token punctuation">,</span>
                padding_factor<span class="token operator">=</span>args<span class="token punctuation">.</span>padding_factor
            <span class="token punctuation">)</span>
            dict_path <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string">'dict.txt'</span><span class="token punctuation">)</span>
            <span class="token comment"># create dict for every language</span>
            <span class="token keyword">for</span> lng_pair <span class="token keyword">in</span> lng_pairs<span class="token punctuation">:</span>
                src<span class="token punctuation">,</span> tgt <span class="token operator">=</span> lng_pair<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">'-'</span><span class="token punctuation">)</span>
                tmp_src_dict_path <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string-interpolation"><span class="token string">f'dict.</span><span class="token interpolation"><span class="token punctuation">{</span>src<span class="token punctuation">}</span></span><span class="token string">.txt'</span></span><span class="token punctuation">)</span>
                tmp_tgt_dict_path <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string-interpolation"><span class="token string">f'dict.</span><span class="token interpolation"><span class="token punctuation">{</span>tgt<span class="token punctuation">}</span></span><span class="token string">.txt'</span></span><span class="token punctuation">)</span>
                <span class="token keyword">if</span> <span class="token keyword">not</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>exists<span class="token punctuation">(</span>tmp_src_dict_path<span class="token punctuation">)</span><span class="token punctuation">:</span>
                    src_dict<span class="token punctuation">.</span>save<span class="token punctuation">(</span>tmp_src_dict_path<span class="token punctuation">)</span>
                <span class="token keyword">if</span> <span class="token keyword">not</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>exists<span class="token punctuation">(</span>tmp_tgt_dict_path<span class="token punctuation">)</span><span class="token punctuation">:</span>
                    src_dict<span class="token punctuation">.</span>save<span class="token punctuation">(</span>tmp_tgt_dict_path<span class="token punctuation">)</span> 
            <span class="token keyword">print</span><span class="token punctuation">(</span>src_dict<span class="token punctuation">)</span>
        <span class="token keyword">else</span><span class="token punctuation">:</span>
            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"| build en dict."</span><span class="token punctuation">)</span>
            src_dict <span class="token operator">=</span> build_dictionary<span class="token punctuation">(</span><span class="token punctuation">[</span>f <span class="token keyword">for</span> f <span class="token keyword">in</span> train_files <span class="token keyword">if</span> f<span class="token punctuation">.</span>replace<span class="token punctuation">(</span><span class="token string">'.tok.bpe'</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">.</span>endswith<span class="token punctuation">(</span><span class="token string">'.en'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
            src_dict<span class="token punctuation">.</span>finalize<span class="token punctuation">(</span>
                nwords<span class="token operator">=</span>args<span class="token punctuation">.</span>nwordssrc<span class="token punctuation">,</span>
                padding_factor<span class="token operator">=</span>args<span class="token punctuation">.</span>padding_factor
            <span class="token punctuation">)</span>
            src_dict<span class="token punctuation">.</span>save<span class="token punctuation">(</span>dict_path<span class="token punctuation">)</span>

            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"| build xx dict."</span><span class="token punctuation">)</span>
            tgt_dict <span class="token operator">=</span> build_dictionary<span class="token punctuation">(</span><span class="token punctuation">[</span>f <span class="token keyword">for</span> f <span class="token keyword">in</span> train_files <span class="token keyword">if</span> <span class="token keyword">not</span> f<span class="token punctuation">.</span>replace<span class="token punctuation">(</span><span class="token string">'.tok.bpe'</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">.</span>endswith<span class="token punctuation">(</span><span class="token string">'.en'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
            tgt_dict<span class="token punctuation">.</span>finalize<span class="token punctuation">(</span>
                nwords<span class="token operator">=</span>args<span class="token punctuation">.</span>nwordssrc<span class="token punctuation">,</span>
                padding_factor<span class="token operator">=</span>args<span class="token punctuation">.</span>padding_factor
            <span class="token punctuation">)</span>
            tgt_dict<span class="token punctuation">.</span>save<span class="token punctuation">(</span>tgt_dict_path<span class="token punctuation">)</span>

    <span class="token keyword">def</span> <span class="token function">make_binary_dataset</span><span class="token punctuation">(</span>input_prefix<span class="token punctuation">,</span> output_prefix<span class="token punctuation">,</span> lng_pair<span class="token punctuation">,</span> lang<span class="token punctuation">,</span> num_workers<span class="token punctuation">)</span><span class="token punctuation">:</span>
        <span class="token keyword">if</span> <span class="token keyword">not</span> args<span class="token punctuation">.</span>joined_dictionary <span class="token keyword">and</span> lang <span class="token operator">!=</span> <span class="token string">'en'</span><span class="token punctuation">:</span>
            <span class="token builtin">dict</span> <span class="token operator">=</span> dictionary<span class="token punctuation">.</span>Dictionary<span class="token punctuation">.</span>load<span class="token punctuation">(</span>tgt_dict_path<span class="token punctuation">)</span>
        <span class="token keyword">else</span><span class="token punctuation">:</span>
            <span class="token builtin">dict</span> <span class="token operator">=</span> dictionary<span class="token punctuation">.</span>Dictionary<span class="token punctuation">.</span>load<span class="token punctuation">(</span>dict_path<span class="token punctuation">)</span>

        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'| [{}] Dictionary: {} types'</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>lang<span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span><span class="token builtin">dict</span><span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
        n_seq_tok <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span>
        replaced <span class="token operator">=</span> Counter<span class="token punctuation">(</span><span class="token punctuation">)</span>

        <span class="token keyword">def</span> <span class="token function">merge_result</span><span class="token punctuation">(</span>worker_result<span class="token punctuation">)</span><span class="token punctuation">:</span>
            replaced<span class="token punctuation">.</span>update<span class="token punctuation">(</span>worker_result<span class="token punctuation">[</span><span class="token string">'replaced'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
            n_seq_tok<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">+=</span> worker_result<span class="token punctuation">[</span><span class="token string">'nseq'</span><span class="token punctuation">]</span>
            n_seq_tok<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">+=</span> worker_result<span class="token punctuation">[</span><span class="token string">'ntok'</span><span class="token punctuation">]</span>

        input_file <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f'</span><span class="token interpolation"><span class="token punctuation">{</span>input_prefix<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lng_pair<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lang<span class="token punctuation">}</span></span><span class="token string">.tok.bpe'</span></span>
        <span class="token keyword">if</span> <span class="token keyword">not</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>exists<span class="token punctuation">(</span>input_file<span class="token punctuation">)</span><span class="token punctuation">:</span>
            input_file <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f'</span><span class="token interpolation"><span class="token punctuation">{</span>input_prefix<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lng_pair<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lang<span class="token punctuation">}</span></span><span class="token string">'</span></span>
            <span class="token keyword">if</span> <span class="token keyword">not</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>exists<span class="token punctuation">(</span>input_file<span class="token punctuation">)</span><span class="token punctuation">:</span>
                <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"| {} not found"</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>input_file<span class="token punctuation">)</span><span class="token punctuation">)</span>
                <span class="token keyword">return</span>
        <span class="token keyword">if</span> args<span class="token punctuation">.</span>expert<span class="token punctuation">:</span>
            input_file <span class="token operator">=</span> input_file <span class="token operator">+</span> <span class="token string">'.e'</span>
        offsets <span class="token operator">=</span> Tokenizer<span class="token punctuation">.</span>find_offsets<span class="token punctuation">(</span>input_file<span class="token punctuation">,</span> num_workers<span class="token punctuation">)</span>
        pool <span class="token operator">=</span> <span class="token boolean">None</span>
        <span class="token keyword">if</span> num_workers <span class="token operator">></span> <span class="token number">1</span><span class="token punctuation">:</span>
            pool <span class="token operator">=</span> Pool<span class="token punctuation">(</span>processes<span class="token operator">=</span>num_workers <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span>
            <span class="token keyword">for</span> worker_id <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> num_workers<span class="token punctuation">)</span><span class="token punctuation">:</span>
                fn_without_ext <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>output_prefix<span class="token punctuation">}</span></span><span class="token interpolation"><span class="token punctuation">{</span>worker_id<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lng_pair<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lang<span class="token punctuation">}</span></span><span class="token string">"</span></span>
                pool<span class="token punctuation">.</span>apply_async<span class="token punctuation">(</span>binarize<span class="token punctuation">,</span> <span class="token punctuation">(</span>input_file<span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">,</span> fn_without_ext<span class="token punctuation">,</span>
                                            offsets<span class="token punctuation">[</span>worker_id<span class="token punctuation">]</span><span class="token punctuation">,</span>
                                            offsets<span class="token punctuation">[</span>worker_id <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> callback<span class="token operator">=</span>merge_result<span class="token punctuation">)</span>
            pool<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>

        ds <span class="token operator">=</span> indexed_dataset<span class="token punctuation">.</span>IndexedDatasetBuilder<span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>output_prefix<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lng_pair<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lang<span class="token punctuation">}</span></span><span class="token string">.bin"</span></span><span class="token punctuation">)</span>
        merge_result<span class="token punctuation">(</span>Tokenizer<span class="token punctuation">.</span>binarize<span class="token punctuation">(</span>input_file<span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">,</span> <span class="token keyword">lambda</span> t<span class="token punctuation">:</span> ds<span class="token punctuation">.</span>add_item<span class="token punctuation">(</span>t<span class="token punctuation">)</span><span class="token punctuation">,</span>
                                        offset<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span> end<span class="token operator">=</span>offsets<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
        <span class="token keyword">if</span> num_workers <span class="token operator">></span> <span class="token number">1</span><span class="token punctuation">:</span>
            pool<span class="token punctuation">.</span>join<span class="token punctuation">(</span><span class="token punctuation">)</span>
            <span class="token keyword">for</span> worker_id <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> num_workers<span class="token punctuation">)</span><span class="token punctuation">:</span>
                temp_file_path <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>output_prefix<span class="token punctuation">}</span></span><span class="token interpolation"><span class="token punctuation">{</span>worker_id<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lng_pair<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lang<span class="token punctuation">}</span></span><span class="token string">"</span></span>
                ds<span class="token punctuation">.</span>merge_file_<span class="token punctuation">(</span>temp_file_path<span class="token punctuation">)</span>
                os<span class="token punctuation">.</span>remove<span class="token punctuation">(</span>indexed_dataset<span class="token punctuation">.</span>data_file_path<span class="token punctuation">(</span>temp_file_path<span class="token punctuation">)</span><span class="token punctuation">)</span>
                os<span class="token punctuation">.</span>remove<span class="token punctuation">(</span>indexed_dataset<span class="token punctuation">.</span>index_file_path<span class="token punctuation">(</span>temp_file_path<span class="token punctuation">)</span><span class="token punctuation">)</span>

        ds<span class="token punctuation">.</span>finalize<span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>output_prefix<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lng_pair<span class="token punctuation">}</span></span><span class="token string">.</span><span class="token interpolation"><span class="token punctuation">{</span>lang<span class="token punctuation">}</span></span><span class="token string">.idx"</span></span><span class="token punctuation">)</span>

        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'| [{}] {}: {} sents, {} tokens, {:.3}% replaced by {}'</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>
            lang<span class="token punctuation">,</span> input_file<span class="token punctuation">,</span> n_seq_tok<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> n_seq_tok<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
            <span class="token number">100</span> <span class="token operator">*</span> <span class="token builtin">sum</span><span class="token punctuation">(</span>replaced<span class="token punctuation">.</span>values<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> n_seq_tok<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">.</span>unk_word<span class="token punctuation">)</span><span class="token punctuation">)</span>

    <span class="token keyword">def</span> <span class="token function">make_all</span><span class="token punctuation">(</span>lng_pair<span class="token punctuation">,</span> lang<span class="token punctuation">)</span><span class="token punctuation">:</span>
        make_binary_dataset<span class="token punctuation">(</span>
            os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>train_dir<span class="token punctuation">,</span> <span class="token string">'train'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
            os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string">'train'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
            lng_pair<span class="token punctuation">,</span> lang<span class="token punctuation">,</span> num_workers<span class="token operator">=</span>args<span class="token punctuation">.</span>workers<span class="token punctuation">)</span>
        make_binary_dataset<span class="token punctuation">(</span>
            os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>test_dir<span class="token punctuation">,</span> <span class="token string">'test'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
            os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string">'test'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
            lng_pair<span class="token punctuation">,</span> lang<span class="token punctuation">,</span> num_workers<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">)</span>
        make_binary_dataset<span class="token punctuation">(</span>
            os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>valid_dir<span class="token punctuation">,</span> <span class="token string">'valid'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
            os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string">'valid'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
            lng_pair<span class="token punctuation">,</span> lang<span class="token punctuation">,</span> num_workers<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">)</span>

    lngs <span class="token operator">=</span> <span class="token builtin">set</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token keyword">for</span> lng_pair <span class="token keyword">in</span> lng_pairs<span class="token punctuation">:</span>
        src_and_tgt <span class="token operator">=</span> lng_pair<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">'-'</span><span class="token punctuation">)</span>
        <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>src_and_tgt<span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token number">2</span><span class="token punctuation">:</span>
            <span class="token keyword">continue</span>
        src<span class="token punctuation">,</span> tgt <span class="token operator">=</span> src_and_tgt
        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"| building: "</span><span class="token punctuation">,</span> src<span class="token punctuation">,</span> tgt<span class="token punctuation">)</span>
        lngs<span class="token punctuation">.</span>add<span class="token punctuation">(</span>src<span class="token punctuation">)</span>
        lngs<span class="token punctuation">.</span>add<span class="token punctuation">(</span>tgt<span class="token punctuation">)</span>
        make_all<span class="token punctuation">(</span>lng_pair<span class="token punctuation">,</span> src<span class="token punctuation">)</span>
        make_all<span class="token punctuation">(</span>lng_pair<span class="token punctuation">,</span> tgt<span class="token punctuation">)</span>

    lngs <span class="token operator">=</span> <span class="token builtin">list</span><span class="token punctuation">(</span>lngs<span class="token punctuation">)</span>
    lngs<span class="token punctuation">.</span>sort<span class="token punctuation">(</span><span class="token punctuation">)</span>
    json<span class="token punctuation">.</span>dump<span class="token punctuation">(</span>lngs<span class="token punctuation">,</span> <span class="token builtin">open</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>destdir<span class="token punctuation">,</span> <span class="token string">'all_lngs.json'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'w'</span><span class="token punctuation">)</span><span class="token punctuation">)</span>


<span class="token keyword">def</span> <span class="token function">binarize</span><span class="token punctuation">(</span>filename<span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">,</span> fn_without_ext<span class="token punctuation">,</span> offset<span class="token punctuation">,</span> end<span class="token punctuation">)</span><span class="token punctuation">:</span>
    ds <span class="token operator">=</span> indexed_dataset<span class="token punctuation">.</span>IndexedDatasetBuilder<span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>fn_without_ext<span class="token punctuation">}</span></span><span class="token string">.bin"</span></span><span class="token punctuation">)</span>

    <span class="token keyword">def</span> <span class="token function">consumer</span><span class="token punctuation">(</span>tensor<span class="token punctuation">)</span><span class="token punctuation">:</span>
        ds<span class="token punctuation">.</span>add_item<span class="token punctuation">(</span>tensor<span class="token punctuation">)</span>

    res <span class="token operator">=</span> Tokenizer<span class="token punctuation">.</span>binarize<span class="token punctuation">(</span>filename<span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">,</span> consumer<span class="token punctuation">,</span> offset<span class="token operator">=</span>offset<span class="token punctuation">,</span> end<span class="token operator">=</span>end<span class="token punctuation">)</span>
    ds<span class="token punctuation">.</span>finalize<span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>fn_without_ext<span class="token punctuation">}</span></span><span class="token string">.idx"</span></span><span class="token punctuation">)</span>
    <span class="token keyword">return</span> res


<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">'__main__'</span><span class="token punctuation">:</span>
    parser <span class="token operator">=</span> get_parser<span class="token punctuation">(</span><span class="token punctuation">)</span>
    args <span class="token operator">=</span> parser<span class="token punctuation">.</span>parse_args<span class="token punctuation">(</span><span class="token punctuation">)</span>
    main<span class="token punctuation">(</span>args<span class="token punctuation">)</span>
</code></pre> 
  <p>上述代码的大致预处理流程为:</p> 
  <ul> 
   <li>分词:<code>perl $TOKENIZER -threads 8 -l $l > $tmp/$tok</code></li> 
   <li>清理:<code>perl $CLEAN -ratio 1.5 $tmp/train.tags.$lang.tok $src $tgt $tmp/train.tags.$lang.clean 1 175</code></li> 
   <li>小写化:<code>perl $LC < $tmp/train.tags.$lang.clean.$l > $tmp/train.tags.$lang.$l</code></li> 
   <li>为测试数据进行同样的:分词、小写化</li> 
   <li>创建训练、验证、测试集</li> 
   <li>使用所有训练数据学习bpe:<code>python $BPEROOT/learn_bpe.py -s $BPE_TOKENS < $TRAIN > $BPE_CODE</code></li> 
   <li>对所有文件进行bpe:<code>python $BPEROOT/apply_bpe.py -c $BPE_CODE < $tmp/$f > $prep/$f</code></li> 
   <li>创建词典&二值化:<code>python iwslt14/preprocess_universal.py --pref=iwslt14/ --joined-dictionary</code></li> 
  </ul> 
  <p>另外需要特别说明的是,preprocess_multilingual.py需要用到fairseq库, 而如果直接在当前环境pip install fairseq,得到最新版本是跑不了这些代码的。方法有二:1. <code>pip install fairseq==0.6.1</code>(没有尝试);2. <code>git clone https://github.com/RayeRen/multilingual-kd-pytorch ; cp -r multilingual-kd-pytorch/fairseq .</code>。</p> 
  <p>最终得到data-bin文件夹,用于模型的训练。<br> <s>(关于以上预处理流程中涉及到的代码的大致解析,请见[机器翻译] 常见预处理代码解析)</s></p> 
  <h1>模型训练</h1> 
  <p>看LaSS。</p> 
  <h1>补充</h1> 
  <h2>补充一:Key error while accessing batch_iterator.first_batch</h2> 
  <p>如果遇到该错误,则是因为上面的preprocess_multilingual.py与你使用的fairseq版本不对应,可以尝试[机器翻译] multilingual fairseq-preprocess中的方法。</p> 
  <h1>参考</h1> 
  <p>https://github.com/NLP-Playground/LaSS<br> https://github.com/RayeRen/multilingual-kd-pytorch/blob/master/data/iwslt/raw/prepare-iwslt14.sh<br> https://blog.csdn.net/jokerxsy/article/details/125054739</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1538393581520187392"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(机器翻译,机器翻译,自然语言处理,人工智能)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1901642400963555328.htm"
                           title="【技术解密】本地部署 DeepSeek-V3:完整指南" target="_blank">【技术解密】本地部署 DeepSeek-V3:完整指南</a>
                        <span class="text-muted">海棠AI实验室</span>
<a class="tag" taget="_blank" href="/search/%E2%80%9C%E6%99%BA%E5%85%83%E5%90%AF%E7%A4%BA%E5%BD%95%E2%80%9C/1.htm">“智元启示录“</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/AI%E5%8F%91%E5%B1%95%E7%9A%84%E6%B7%B1%E5%BA%A6%E6%80%9D%E8%80%83%E4%B8%8E%E6%9C%AA%E6%9D%A5%E5%B1%95%E6%9C%9B/1.htm">AI发展的深度思考与未来展望</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a>
                        <div>目录引言运行环境需求下载与安装推理部署总结参考资源引言随着人工智能的快速发展,开源大模型正逐步改变着技术生态。DeepSeek-V3作为最新的开源大模型之一,不仅提供了强大的推理能力,同时也支持本地部署,使开发者可以灵活地进行自定义优化。本文将详细介绍如何在本地部署DeepSeek-V3,涵盖系统要求、安装步骤、模型转换及不同推理框架的应用。1.运行环境需求1.1硬件要求✅NVIDIAGPU(支持</div>
                    </li>
                    <li><a href="/article/1901641391440719872.htm"
                           title="人工智能伦理与可持续发展" target="_blank">人工智能伦理与可持续发展</a>
                        <span class="text-muted">CarlowZJ</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>前言人工智能(AI)技术正在深刻地改变我们的生活和工作方式。从自动驾驶汽车到智能医疗系统,从个性化推荐到自动化决策,AI的应用无处不在。然而,随着技术的快速发展,其伦理和社会影响也引发了广泛的关注。人工智能伦理不仅涉及技术本身的公平性、透明性和安全性,还涉及到更广泛的社会、经济和环境影响。本文将探讨人工智能伦理的核心问题,并从可持续发展的角度提出应对策略。一、人工智能伦理的核心问题1.1数据隐私与</div>
                    </li>
                    <li><a href="/article/1901630419128872960.htm"
                           title="机器学习中输入输出Tokens的概念详解" target="_blank">机器学习中输入输出Tokens的概念详解</a>
                        <span class="text-muted">爱吃土豆的程序员</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/1.htm">机器学习基础</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/Tokens/1.htm">Tokens</a>
                        <div>随着深度学习技术的快速发展,大语言模型(LargeLanguageModels,LLMs)已经成为自然语言处理(NLP)领域的一个热点研究方向。这些模型不仅能够生成高质量的文本,还能在多种任务中展现出卓越的表现,比如机器翻译、问答系统、文本摘要等。在大语言模型的工作流程中,Tokens的概念扮演着至关重要的角色。本文将详细介绍大语言模型如何使用Tokens,以及如何计算Tokens的数量。什么是T</div>
                    </li>
                    <li><a href="/article/1901626513619480576.htm"
                           title="情感分析任务的概述" target="_blank">情感分析任务的概述</a>
                        <span class="text-muted">阿你不是</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、情感分析的概述1、什么是情感分析情感分析,也称为情感分类,是一种自然语言处理的任务,用于分析文本、语音或其他形式的数据中所包含的情感倾向。其目标是判断数据表达的情感是积极的(Positive)、消极的(Negative)还是中立的(Neutral),或者进一步细化为更复杂的情感类别(如愤怒、喜悦、悲伤等)。2、情感分析的主要应用场景1)商业领域:情感分析主要进行产品评价分析,从客户和买家的评价</div>
                    </li>
                    <li><a href="/article/1901621721350336512.htm"
                           title="AI时代如何引流" target="_blank">AI时代如何引流</a>
                        <span class="text-muted">alankuo</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>AI时代引流可以从以下几个方面着手:利用AI精准定位与个性化营销精准客户画像:借助AI整合多维度数据,涵盖客户的年龄、性别、地理位置、消费习惯、浏览历史等,深度挖掘后绘制精准的客户画像,明确潜在客户特征与需求,让营销活动更具针对性。个性化内容创作:运用AI的自然语言处理功能,依据客户特点和需求生成个性化的营销内容,如广告文案、产品推荐等。以电商平台为例,可针对不同用户生成符合其喜好的商品推荐文案。</div>
                    </li>
                    <li><a href="/article/1901620712293068800.htm"
                           title="LLM-PowerHouse: 一站式大型语言模型定制训练与推理指南" target="_blank">LLM-PowerHouse: 一站式大型语言模型定制训练与推理指南</a>
                        <span class="text-muted">Nifc666</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a><a class="tag" taget="_blank" href="/search/whisper/1.htm">whisper</a><a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/gpt/1.htm">gpt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6/1.htm">开源软件</a>
                        <div>LLM-PowerHouse:解锁大型语言模型的潜力在人工智能和自然语言处理领域,大型语言模型(LargeLanguageModels,LLMs)正在掀起一场革命。随着GPT、BERT等模型的出现,LLMs展现出了惊人的能力,可以执行各种复杂的语言任务。然而,如何有效地训练和使用这些强大的模型仍然是一个挑战。针对这一需求,GitHub上的LLM-PowerHouse项目应运而生,为开发者、研究人员</div>
                    </li>
                    <li><a href="/article/1901616806255194112.htm"
                           title="输入:0.5元/百万tokens(缓存命中)或2元(未命中) 输出:8元/百万tokens" target="_blank">输入:0.5元/百万tokens(缓存命中)或2元(未命中) 输出:8元/百万tokens</a>
                        <span class="text-muted">杏花春雨江南</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
                        <div>这句话描述了一种定价模型,通常用于云计算、API服务或数据处理服务中,根据资源使用情况(如缓存命中与否)来收费。以下是对这句话的详细解释:1.关键术语解释Tokens:在自然语言处理(NLP)或数据处理领域,Token通常指文本的最小单位(如一个单词或一个字符)。在这里,Tokens是计费的单位。缓存命中(CacheHit):当请求的数据已经在缓存中时,称为缓存命中。缓存命中通常意味着更快的响应速</div>
                    </li>
                    <li><a href="/article/1901614916415057920.htm"
                           title="【sklearn 01】人工智能概述" target="_blank">【sklearn 01】人工智能概述</a>
                        <span class="text-muted">@金色海岸</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/sklearn/1.htm">sklearn</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>一、人工智能,机器学习,深度学习人工智能指由人类制造出的具有智能的机器。这是一个非常大的范围,长远目标是让机器实现人工智能,但目前我们仍处在非常初始的阶段,甚至不能称为智能机器学习是指通过数据训练出能完成一定功能的模型,是实现人工智能的手段之一,也是目前最主流的人工智能实现方法深度学习则是机器学习的分支,超过8层的神经网络模型就叫深度学习,深度即层数。深度学习目前在语音、图像等领域取得很好的效果</div>
                    </li>
                    <li><a href="/article/1901607228239048704.htm"
                           title="【人工智能】【Python】在Scikit-Learn中使用决策树算法(ID3和CART)" target="_blank">【人工智能】【Python】在Scikit-Learn中使用决策树算法(ID3和CART)</a>
                        <span class="text-muted">SmallBambooCode</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/scikit-learn/1.htm">scikit-learn</a><a class="tag" taget="_blank" href="/search/%E5%86%B3%E7%AD%96%E6%A0%91/1.htm">决策树</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.treeimportDecisionTreeClassifier,plot_tree#加载数据集iris=load_iri</div>
                    </li>
                    <li><a href="/article/1901605385337368576.htm"
                           title="差异中寻找共识:浅析中美欧AIGC服务商的标识义务" target="_blank">差异中寻找共识:浅析中美欧AIGC服务商的标识义务</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>2025年1月7日,西藏日喀则地震中一张被广泛传播的图片“被压在废墟下的小男孩”被证明是AI合成图片,[1]这随即引发了社会对于人工智能生成物(ArtificialIntelligenceGeneratedContent,以下简称“AIGC”)的广泛讨论。随着AI大模型生成逼真图像、音频与视频的能力日益增强,人类作品与AIGC之间的界限愈发模糊。如不加以管控,则会产生“真相侵蚀”(TruthDec</div>
                    </li>
                    <li><a href="/article/1901605386679545856.htm"
                           title="迷雾渐开:美国AIGC可版权性剖析及案例梳理" target="_blank">迷雾渐开:美国AIGC可版权性剖析及案例梳理</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>当地时间2025年1月29日,美国版权局(U.S.CopyrightOffice,USCO)发布了版权和人工智能相关法律和政策报告的第二部分——《版权和人工智能:可版权性》(以下简称“《USCO可版权性报告》”)[1],旨在探讨人工智能生成内容(AIGC)的可版权性问题。该报告明确指出,美国版权局认为现有的版权法足以解决AIGC问题,因此无需制定新的立法。具体而言,该报告在此前美国版权局于2023</div>
                    </li>
                    <li><a href="/article/1901605256962306048.htm"
                           title="智能体平台架构深度剖析:从底层到应用的全链路解析" target="_blank">智能体平台架构深度剖析:从底层到应用的全链路解析</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>在当今人工智能飞速发展的时代,智能体平台作为承载和驱动智能应用的关键基础设施,其架构设计至关重要。一个优秀的智能体平台架构,能够高效整合各类资源,实现智能体的灵活构建与稳定运行,为多样化的应用场景提供强大支持。稳固根基:基础资源层与并行平台层基础资源层是整个智能体平台的基石。其中,GPU和服务器构成了强大的计算硬件支撑,确保平台能够应对复杂的计算任务。而数据与OSS(对象存储服务)则如同智能体的“</div>
                    </li>
                    <li><a href="/article/1901605258287706112.htm"
                           title="美国首例AI训练数据版权案:从汤森路透诉罗斯案看AI训练数据的“合理使用”" target="_blank">美国首例AI训练数据版权案:从汤森路透诉罗斯案看AI训练数据的“合理使用”</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>随着人工智能(AI)技术的快速发展和广泛应用,复杂的版权问题也随之而来。2025年2月11日,美国特拉华州联邦地区法院对汤森路透(ThomsonReuters)诉罗斯(Ross)案作出部分简易判决,认定被告罗斯公司未经授权使用受版权保护的作品训练AI法律检索工具的行为构成版权侵权,且不属于合理使用。[1]这是美国首个就AI训练数据作出实质性判决的案件。本文将重点分析其合理使用论述中对于“转换性目的</div>
                    </li>
                    <li><a href="/article/1901590078124257280.htm"
                           title="【人工智能基础2】Tramsformer架构、自然语言处理基础、计算机视觉总结" target="_blank">【人工智能基础2】Tramsformer架构、自然语言处理基础、计算机视觉总结</a>
                        <span class="text-muted">roman_日积跬步-终至千里</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%B9%A0%E9%A2%98/1.htm">人工智能习题</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a>
                        <div>文章目录七、Transformer架构1.替代LSTM的原因2.Transformer架构:编码器-解码器架构3.Transformer架构原理八、自然语言处理基础1.语言模型基本概念2.向量语义3.预训练语言模型的基本原理与方法4.DeepSeek基本原理九、计算机视觉七、Transformer架构1.替代LSTM的原因处理极长序列时,效率下降:虽然LSTM设计的初衷是解决长期依赖问题,即让模型</div>
                    </li>
                    <li><a href="/article/1901583138719592448.htm"
                           title="怎么做一个AI产品经理?" target="_blank">怎么做一个AI产品经理?</a>
                        <span class="text-muted">AI筑梦师</span>
<a class="tag" taget="_blank" href="/search/AI%E4%BA%A7%E5%93%81%E7%BB%8F%E7%90%86/1.htm">AI产品经理</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E4%BA%A7%E5%93%81%E7%BB%8F%E7%90%86/1.htm">产品经理</a>
                        <div>AI产品经理全面进化:在人工智能迅猛发展的时代,产品经理的角色正经历前所未有的转型。从传统的需求捕捉者到技术与商业紧密结合的创新推动者,AI产品经理肩负着将前沿AI技术转化为解决用户痛点的产品的重要任务。随着大数据、云计算和大模型技术的不断成熟,产品经理不仅需要具备敏锐的市场洞察,还必须深刻理解AI技术本质,跨界整合技术、数据与业务优势,从而推动产品的持续创新与落地。本文将全面解析AI产品经理的角</div>
                    </li>
                    <li><a href="/article/1901566630912126976.htm"
                           title="LORA 微调大模型:从入门到入土" target="_blank">LORA 微调大模型:从入门到入土</a>
                        <span class="text-muted">大模型.</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/gpt/1.htm">gpt</a><a class="tag" taget="_blank" href="/search/agi/1.htm">agi</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a>
                        <div>在当今人工智能领域,预训练的大模型已经成为推动技术发展的核心力量。然而,在实际项目中,我们往往会发现这些预训练模型虽然强大,但直接就去应用于一些特定的任务时,往往无法完全满足需求。这时,微调就成为了必不可少的一步。而在众多微调方法中,LORA全名(Low-RankAdaptation)以高效性和实用性,逐渐成为了许多开发者训练模型的首选项。作为一名小有经验的咸鱼开发者,我深知在实际项目中高效的进行</div>
                    </li>
                    <li><a href="/article/1901560579508727808.htm"
                           title="AI人工智能中的概率论与统计学原理与Python实战:Python实现概率模型" target="_blank">AI人工智能中的概率论与统计学原理与Python实战:Python实现概率模型</a>
                        <span class="text-muted">AI天才研究院</span>
<a class="tag" taget="_blank" href="/search/AI%E5%AE%9E%E6%88%98/1.htm">AI实战</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">AI大模型企业级应用开发实战</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/RPA/1.htm">RPA</a>
                        <div>1.背景介绍随着人工智能技术的不断发展,概率论与统计学在人工智能领域的应用越来越广泛。概率论与统计学是人工智能中的基础知识之一,它们在机器学习、深度学习、自然语言处理等领域都有着重要的作用。本文将介绍概率论与统计学的核心概念、算法原理、具体操作步骤以及Python实现方法,并通过具体代码实例进行详细解释。2.核心概念与联系2.1概率论与统计学的区别概率论是一门数学学科,它研究随机事件发生的可能性。</div>
                    </li>
                    <li><a href="/article/1901558558261047296.htm"
                           title="二值逻辑、三值逻辑到多值逻辑的变迁(含示例)" target="_blank">二值逻辑、三值逻辑到多值逻辑的变迁(含示例)</a>
                        <span class="text-muted">搏博</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%8E%9F%E7%90%86/1.htm">人工智能原理</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                        <div>二值逻辑、三值逻辑到多值逻辑的变迁是一个逻辑体系不断拓展和深化的过程,反映了人们对复杂现象和不确定性问题认识的逐步深入。前文,我们已经探讨过命题逻辑与谓词逻辑,了解了如何用符号语言从浅入深地刻画现实世界。具体可以看我的CSDN文章:人工智能的数学基础之命题逻辑与谓词逻辑(含示例)-CSDN博客人工智能中用到的逻辑可概括地划分为两大类。第一类是经典命题逻辑和一阶谓词逻辑,第二类是泛指除经典逻辑之外的</div>
                    </li>
                    <li><a href="/article/1901558432041857024.htm"
                           title="ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)" target="_blank">ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)</a>
                        <span class="text-muted">神秘泣男子</span>
<a class="tag" taget="_blank" href="/search/%E5%B8%B8%E8%A7%81AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E4%B8%8E%E5%BA%94%E7%94%A8/1.htm">常见AI大模型部署与应用</a><a class="tag" taget="_blank" href="/search/Ollama%E9%83%A8%E7%BD%B2LLM/1.htm">Ollama部署LLM</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/ollama/1.htm">ollama</a><a class="tag" taget="_blank" href="/search/llama/1.htm">llama</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>目录一、下载大模型(DeepSeek)2.安装Ollama3.检查安装是否成功二、拉取大模型(DeepSeek)1.打开命令行2.下载模型3.测试下载4.等待下载完成三.模型存放路径这个位置!!在人工智能快速发展的今天,大语言模型已经成为许多人探索和使用的热门技术。而Ollama作为一款轻量级的本地大模型运行工具,让我们能够在个人电脑上体验各种强大的AI模型,如DeepSeek系列。不少用户在安装</div>
                    </li>
                    <li><a href="/article/1901536112065703936.htm"
                           title="AIGC从入门到实战:可能消失的职业和新出现的机会" target="_blank">AIGC从入门到实战:可能消失的职业和新出现的机会</a>
                        <span class="text-muted">AGI大模型与大数据研究院</span>
<a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1/1.htm">R1</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AEAI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">大数据AI人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E7%A7%91%E5%AD%A6/1.htm">计算科学</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E8%AE%A1%E7%AE%97/1.htm">神经计算</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%9E%8B%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大型语言模型</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/RPA/1.htm">RPA</a>
                        <div>AIGC从入门到实战:可能消失的职业和新出现的机会作者:禅与计算机程序设计艺术1.背景介绍人工智能生成内容(AIGC)正在迅速改变我们的世界。从文本、代码到图像和音乐,AIGC正在各个领域展示其强大的能力,并开始挑战传统的创意产业。本篇文章将深入探讨AIGC的概念、技术原理、应用场景以及其对未来职业的影响,并为读者提供入门AIGC的实用指南。1.1AIGC的兴起AIGC的兴起得益于近年来人工智能技</div>
                    </li>
                    <li><a href="/article/1901531731786264576.htm"
                           title="Collab-Overcooked:专注于多智能体协作的语言模型基准测试平台" target="_blank">Collab-Overcooked:专注于多智能体协作的语言模型基准测试平台</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a>
                        <div>2025-02-27,由北京邮电大学和理想汽车公司联合创建。该平台基于《Overcooked-AI》游戏环境,设计了更具挑战性和实用性的交互任务,目的通过自然语言沟通促进多智能体协作。一、研究背景近年来,基于大型语言模型的智能体系统在复杂任务分解和规划方面展现出巨大潜力,成为自然语言处理领域的研究热点。然而,随着研究的深入,人们发现单个智能体在处理复杂任务时存在局限性,而多智能体系统通过协作能够显</div>
                    </li>
                    <li><a href="/article/1901527289913470976.htm"
                           title="内容创作者必备!Deepseek赋能,让创作更高效" target="_blank">内容创作者必备!Deepseek赋能,让创作更高效</a>
                        <span class="text-muted">小焱创作</span>
<a class="tag" taget="_blank" href="/search/AI%E6%94%B9%E5%8F%98%E6%9C%AA%E6%9D%A5/1.htm">AI改变未来</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%86%99%E4%BD%9C/1.htm">人工智能写作</a><a class="tag" taget="_blank" href="/search/ai%E5%86%99%E4%BD%9C/1.htm">ai写作</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/chatgpt/1.htm">chatgpt</a>
                        <div>内容创作者必备!DeepSeek赋能,让创作更高效在当今信息爆炸的时代,内容创作已成为自媒体博主们展现才华、吸引粉丝的重要途径。然而,面对日益增长的竞争压力和不断变化的用户需求,如何高效、高质量地产出内容成为了摆在我们面前的一大挑战。幸运的是,随着人工智能技术的飞速发展,一款名为DeepSeek的智能工具应运而生,为内容创作者提供了强大的赋能。本文将深入探讨DeepSeek的基本概念、深层次解读、</div>
                    </li>
                    <li><a href="/article/1901513796074139648.htm"
                           title="开源模型应用落地-Qwen2-VL-7B-Instruct-vLLM-OpenAI API Client调用" target="_blank">开源模型应用落地-Qwen2-VL-7B-Instruct-vLLM-OpenAI API Client调用</a>
                        <span class="text-muted">开源技术探险家</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B-%E6%96%B0%E6%89%8B%E8%AF%95%E7%82%BC/1.htm">开源大语言模型-新手试炼</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a>
                        <div>一、前言学习Qwen2-VL,为我们打开了一扇通往先进人工智能技术的大门。让我们能够深入了解当今最前沿的视觉语言模型的工作原理和强大能力。这不仅拓宽了我们的知识视野,更让我们站在科技发展的潮头,紧跟时代的步伐。Qwen2-VL具有卓越的图像和视频理解能力,以及多语言支持等特性。学习它可以提升我们处理复杂视觉信息的能力,无论是在学术研究中分析图像数据、解读视频内容,还是在实际工作中进行文档处理、解决</div>
                    </li>
                    <li><a href="/article/1901504464225890304.htm"
                           title="ChatGPT、DeepSeek、Grok 三者对比:AI 语言模型的博弈与未来" target="_blank">ChatGPT、DeepSeek、Grok 三者对比:AI 语言模型的博弈与未来</a>
                        <span class="text-muted">一ge科研小菜菜</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>个人主页:一ge科研小菜鸡-CSDN博客期待您的关注1.引言随着人工智能技术的飞速发展,AI语言模型已经成为人机交互、内容创作、代码生成、智能问答等领域的重要工具。其中,ChatGPT(OpenAI)、DeepSeek(中国团队研发)和Grok(xAI,ElonMusk旗下公司)是当前三大具有代表性的AI语言模型。它们在技术架构、应用场景、用户体验、生态开放性等多个维度各具特色,并针对不同的用户需</div>
                    </li>
                    <li><a href="/article/1901504464896978944.htm"
                           title="Ollama 基本概念" target="_blank">Ollama 基本概念</a>
                        <span class="text-muted">Mr_One_Zhang</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0Ollama/1.htm">学习Ollama</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>Ollama是一个本地化的、支持多种自然语言处理(NLP)任务的机器学习框架,专注于模型加载、推理和生成任务。通过Ollama,用户能够方便地与本地部署的大型预训练模型进行交互。1.模型(Model)在Ollama中,模型是核心组成部分。它们是经过预训练的机器学习模型,能够执行不同的任务,例如文本生成、文本摘要、情感分析、对话生成等。Ollama支持多种流行的预训练模型,常见的模型有:deepse</div>
                    </li>
                    <li><a href="/article/1901504212148219904.htm"
                           title="【go从入门到精通】探秘struct结构体转json为什么需要首字母大写?" target="_blank">【go从入门到精通】探秘struct结构体转json为什么需要首字母大写?</a>
                        <span class="text-muted">前网易架构师-高司机</span>
<a class="tag" taget="_blank" href="/search/golang%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/1.htm">golang从入门到精通</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/go/1.htm">go</a><a class="tag" taget="_blank" href="/search/%E7%BB%93%E6%9E%84%E4%BD%93%E9%A6%96%E5%AD%97%E6%AF%8D%E5%A4%A7%E5%86%99/1.htm">结构体首字母大写</a><a class="tag" taget="_blank" href="/search/golang%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/1.htm">golang从入门到精通</a><a class="tag" taget="_blank" href="/search/go%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/1.htm">go从入门到精通</a>
                        <div>目录作者简介:问题抛出分析结论作者简介:高科,先后在IBMPlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。并且深耕深度学习和数据集训练,提供商业化的视觉人工智能检测和预警系统(煤矿,工厂,制造业</div>
                    </li>
                    <li><a href="/article/1901497278527500288.htm"
                           title="为什么转行大模型行业?深度解析职业变革与技术红利" target="_blank">为什么转行大模型行业?深度解析职业变革与技术红利</a>
                        <span class="text-muted">大模型入门教程</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%AD%A6%E4%B9%A0/1.htm">大模型学习</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%85%A5%E9%97%A8/1.htm">大模型入门</a>
                        <div>引言2023年ChatGPT的爆发式发展,标志着AI大模型技术正式进入大众视野。这一技术不仅重塑了人工智能的边界,更催生了全新的职业赛道。从传统算法工程师到互联网从业者,越来越多的人开始将目光投向大模型领域。本文将深入探讨这一现象背后的核心动因,并结合行业现状、技术趋势与职业发展路径,为从业者提供系统性分析。一、行业变革:传统岗位萎缩与大模型崛起传统技术岗位的困境以推荐算法为例,随着移动互联网流量</div>
                    </li>
                    <li><a href="/article/1901495388414734336.htm"
                           title="DeepSeek 与云原生后端:AI 赋能现代应用架构" target="_blank">DeepSeek 与云原生后端:AI 赋能现代应用架构</a>
                        <span class="text-muted">一ge科研小菜菜</span>
<a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>个人主页:一ge科研小菜鸡-CSDN博客期待您的关注1.引言在当今快速发展的互联网时代,云原生(CloudNative)架构已成为后端开发的主流趋势。云原生后端的核心目标是利用云计算的弹性、可扩展性和高可用性,为现代应用提供稳定可靠的后端支持。而人工智能(AI)技术的发展,使得智能化成为云原生后端的新趋势。DeepSeek作为新一代AI技术,在云原生后端的自动化运维、智能资源调度、安全增强和高效数</div>
                    </li>
                    <li><a href="/article/1901486439636463616.htm"
                           title="AI 大模型应用数据中心建设:高性能计算与存储架构" target="_blank">AI 大模型应用数据中心建设:高性能计算与存储架构</a>
                        <span class="text-muted">AI智能涌现深度研究</span>
<a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%BA%94%E7%94%A8%E5%85%A5%E9%97%A8%E5%AE%9E%E6%88%98%E4%B8%8E%E8%BF%9B%E9%98%B6/1.htm">AI大模型应用入门实战与进阶</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>AI大模型、数据中心、高性能计算、存储架构、分布式训练、GPU加速、数据管理1.背景介绍近年来,人工智能(AI)技术取得了飞速发展,特别是深度学习模型的突破性进展,催生了一系列基于大规模数据训练的强大AI模型,例如GPT-3、BERT、DALL-E等。这些AI大模型在自然语言处理、计算机视觉、语音识别等领域展现出强大的应用潜力,但也对计算资源和数据存储提出了极高的要求。传统的计算架构难以满足AI大</div>
                    </li>
                    <li><a href="/article/1901483414192713728.htm"
                           title="人工智能直通车系列24【机器学习基础】(机器学习模型评估指标(回归))" target="_blank">人工智能直通车系列24【机器学习基础】(机器学习模型评估指标(回归))</a>
                        <span class="text-muted">浪九天</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E7%9B%B4%E9%80%9A%E8%BD%A6/1.htm">人工智能直通车</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>目录机器学习模型评估指标(回归)1.均方误差(MeanSquaredError,MSE)2.均方根误差(RootMeanSquaredError,RMSE)3.平均绝对误差(MeanAbsoluteError,MAE)4.决定系数(CoefficientofDetermination,R2)机器学习模型评估指标(回归)1.均方误差(MeanSquaredError,MSE)详细解释均方误差是回归问</div>
                    </li>
                                <li><a href="/article/82.htm"
                                       title="java类加载顺序" target="_blank">java类加载顺序</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>package com.demo;

/**
 * @Description 类加载顺序
 * @author FuJianyong
 * 2015-2-6上午11:21:37
 */
public class ClassLoaderSequence {
	
	String s1 = "成员属性"; 
	
	static String s2 = "</div>
                                </li>
                                <li><a href="/article/209.htm"
                                       title="Hibernate与mybitas的比较" target="_blank">Hibernate与mybitas的比较</a>
                                    <span class="text-muted">BlueSkator</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a><a class="tag" taget="_blank" href="/search/orm/1.htm">orm</a>
                                    <div>第一章     Hibernate与MyBatis 
Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分。 Mybatis 是另外一种优秀的O/R mapping框架。目前属于apache的一个子项目。 
MyBatis 参考资料官网:http:</div>
                                </li>
                                <li><a href="/article/336.htm"
                                       title="php多维数组排序以及实际工作中的应用" target="_blank">php多维数组排序以及实际工作中的应用</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/usort/1.htm">usort</a><a class="tag" taget="_blank" href="/search/uasort/1.htm">uasort</a>
                                    <div>自定义排序函数返回false或负数意味着第一个参数应该排在第二个参数的前面, 正数或true反之, 0相等usort不保存键名uasort 键名会保存下来uksort 排序是对键名进行的 
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8&q</div>
                                </li>
                                <li><a href="/article/463.htm"
                                       title="DOM改变字体大小" target="_blank">DOM改变字体大小</a>
                                    <span class="text-muted">周华华</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                                    <div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml&q</div>
                                </li>
                                <li><a href="/article/590.htm"
                                       title="c3p0的配置" target="_blank">c3p0的配置</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/c3p0/1.htm">c3p0</a>
                                    <div>c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的下载地址是:http://sourceforge.net/projects/c3p0/这里可以下载到c3p0最新版本。 
以在spring中配置dataSource为例: 
<!-- spring加载资源文件 -->
<bean name="prope</div>
                                </li>
                                <li><a href="/article/717.htm"
                                       title="Java获取工程路径的几种方法" target="_blank">Java获取工程路径的几种方法</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>第一种: 
File f = new File(this.getClass().getResource("/").getPath()); 
System.out.println(f); 
结果: 
C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin 
获取当前类的所在工程路径; 
如果不加“</div>
                                </li>
                                <li><a href="/article/844.htm"
                                       title="在类Unix系统下实现SSH免密码登录服务器" target="_blank">在类Unix系统下实现SSH免密码登录服务器</a>
                                    <span class="text-muted">Harry642</span>
<a class="tag" taget="_blank" href="/search/%E5%85%8D%E5%AF%86/1.htm">免密</a><a class="tag" taget="_blank" href="/search/ssh/1.htm">ssh</a>
                                    <div>1.客户机 
    (1)执行ssh-keygen -t rsa -C "xxxxx@xxxxx.com"生成公钥,xxx为自定义大email地址 
    (2)执行scp ~/.ssh/id_rsa.pub root@xxxxxxxxx:/tmp将公钥拷贝到服务器上,xxx为服务器地址 
    (3)执行cat</div>
                                </li>
                                <li><a href="/article/971.htm"
                                       title="Java新手入门的30个基本概念一" target="_blank">Java新手入门的30个基本概念一</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java+%E5%85%A5%E9%97%A8/1.htm">java 入门</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E6%89%8B/1.htm">新手</a>
                                    <div>在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念。  Java概述:  目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合</div>
                                </li>
                                <li><a href="/article/1098.htm"
                                       title="Memcached for windows 简单介绍" target="_blank">Memcached for windows 简单介绍</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a><a class="tag" taget="_blank" href="/search/memcached/1.htm">memcached</a>
                                    <div>1. 安装memcached server 
a. 下载memcached-1.2.6-win32-bin.zip 
b. 解压缩,dos 窗口切换到 memcached.exe所在目录,运行memcached.exe -d install 
c.启动memcached Server,直接在dos窗口键入 net start "memcached Server&quo</div>
                                </li>
                                <li><a href="/article/1225.htm"
                                       title="数据库对象的视图和索引" target="_blank">数据库对象的视图和索引</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E7%B4%A2%E5%BC%95/1.htm">索引</a><a class="tag" taget="_blank" href="/search/oeacle%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">oeacle数据库</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E5%9B%BE/1.htm">视图</a>
                                    <div>  
视图 
  
  视图是从一个表或视图导出的表,也可以是从多个表或视图导出的表。视图是一个虚表,数据库不对视图所对应的数据进行实际存储,只存储视图的定义,对视图的数据进行操作时,只能将字段定义为视图,不能将具体的数据定义为视图 
  
    为什么oracle需要视图; 
   &</div>
                                </li>
                                <li><a href="/article/1352.htm"
                                       title="Mockito(一) --入门篇" target="_blank">Mockito(一) --入门篇</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/1.htm">持续集成</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a>
                                    <div>        Mockito是一个针对Java的mocking框架,它与EasyMock和jMock很相似,但是通过在执行后校验什么已经被调用,它消除了对期望 行为(expectations)的需要。其它的mocking库需要你在执行前记录期望行为(expectations),而这导致了丑陋的初始化代码。 
 &nb</div>
                                </li>
                                <li><a href="/article/1479.htm"
                                       title="精通Oracle10编程SQL(5)SQL函数" target="_blank">精通Oracle10编程SQL(5)SQL函数</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 * SQL函数
*/

--数字函数
--ABS(n):返回数字n的绝对值
declare
  v_abs number(6,2);
begin
  v_abs:=abs(&no);
  dbms_output.put_line('绝对值:'||v_abs);
end;

--ACOS(n):返回数字n的反余弦值,输入值的范围是-1~1,输出值的单位为弧度</div>
                                </li>
                                <li><a href="/article/1606.htm"
                                       title="【Log4j一】Log4j总体介绍" target="_blank">【Log4j一】Log4j总体介绍</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a>
                                    <div>Log4j组件:Logger、Appender、Layout 
  
Log4j核心包含三个组件:logger、appender和layout。这三个组件协作提供日志功能: 
 
 日志的输出目标 
 日志的输出格式 
  日志的输出级别(是否抑制日志的输出) 
  logger继承特性 
A logger is said to be an ancestor of anothe</div>
                                </li>
                                <li><a href="/article/1733.htm"
                                       title="Java IO笔记" target="_blank">Java IO笔记</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>	public static void main(String[] args) throws IOException {
		//输入流
		InputStream in = Test.class.getResourceAsStream("/test");
		InputStreamReader isr = new InputStreamReader(in);
		Bu</div>
                                </li>
                                <li><a href="/article/1860.htm"
                                       title="Docker 监控" target="_blank">Docker 监控</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/docker%E7%9B%91%E6%8E%A7/1.htm">docker监控</a>
                                    <div>         
目前项目内部署了docker,于是涉及到关于监控的事情,参考一些经典实例以及一些自己的想法,总结一下思路。 1、关于监控的内容 监控宿主机本身 
监控宿主机本身还是比较简单的,同其他服务器监控类似,对cpu、network、io、disk等做通用的检查,这里不再细说。 
额外的,因为是docker的</div>
                                </li>
                                <li><a href="/article/1987.htm"
                                       title="java-顺时针打印图形" target="_blank">java-顺时针打印图形</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>一个画图程序 要求打印出: 
 

1.int i=5;   
2.1  2  3  4  5  
3.16 17 18 19 6  
4.15 24 25 20 7  
5.14 23 22 21 8  
6.13 12 11 10 9  
7.  
8.int i=6  
9.1  2  3  4  5   6  
10.20 21 22 23 24  7  
11.19</div>
                                </li>
                                <li><a href="/article/2114.htm"
                                       title="关于iReport汉化版强制使用英文的配置方法" target="_blank">关于iReport汉化版强制使用英文的配置方法</a>
                                    <span class="text-muted">Kai_Ge</span>
<a class="tag" taget="_blank" href="/search/iReport%E6%B1%89%E5%8C%96/1.htm">iReport汉化</a><a class="tag" taget="_blank" href="/search/%E8%8B%B1%E6%96%87%E7%89%88/1.htm">英文版</a>
                                    <div>对于那些具有强迫症的工程师来说,软件汉化固然好用,但是汉化不完整却极为头疼,本方法针对iReport汉化不完整的情况,强制使用英文版,方法如下: 
在 iReport 安装路径下的 etc/ireport.conf 里增加红色部分启动参数,即可变为英文版。   
# ${HOME} will be replaced by user home directory accordin</div>
                                </li>
                                <li><a href="/article/2241.htm"
                                       title="[并行计算]论宇宙的可计算性" target="_blank">[并行计算]论宇宙的可计算性</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97/1.htm">并行计算</a>
                                    <div> 
 
      现在我们知道,一个涡旋系统具有并行计算能力.按照自然运动理论,这个系统也同时具有存储能力,同时具备计算和存储能力的系统,在某种条件下一般都会产生意识...... 
 
      那么,这种概念让我们推论出一个结论 
 
 
    &nb</div>
                                </li>
                                <li><a href="/article/2368.htm"
                                       title="用OpenGL实现无限循环的coverflow" target="_blank">用OpenGL实现无限循环的coverflow</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/coverflow/1.htm">coverflow</a>
                                    <div>网上找了很久,都是用Gallery实现的,效果不是很满意,结果发现这个用OpenGL实现的,稍微修改了一下源码,实现了无限循环功能 
 
源码地址: 
https://github.com/jackfengji/glcoverflow 
 
 

public class CoverFlowOpenGL extends GLSurfaceView implements
		GLSurfaceV</div>
                                </li>
                                <li><a href="/article/2495.htm"
                                       title="JAVA数据计算的几个解决方案1" target="_blank">JAVA数据计算的几个解决方案1</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97/1.htm">计算</a>
                                    <div>老大丢过来的软件跑了10天,摸到点门道,正好跟以前攒的私房有关联,整理存档。 
 
-----------------------------华丽的分割线------------------------------------- 
 
    数据计算层是指介于数据存储和应用程序之间,负责计算数据存储层的数据,并将计算结果返回应用程序的层次。J 
 &nbs</div>
                                </li>
                                <li><a href="/article/2622.htm"
                                       title="简单的用户授权系统,利用给user表添加一个字段标识管理员的方式" target="_blank">简单的用户授权系统,利用给user表添加一个字段标识管理员的方式</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>怎么创建一个简单的(非 RBAC)用户授权系统 
通过查看论坛,我发现这是一个常见的问题,所以我决定写这篇文章。 
本文只包括授权系统.假设你已经知道怎么创建身份验证系统(登录)。 数据库 
首先在 user 表创建一个新的字段(integer 类型),字段名 'accessLevel',它定义了用户的访问权限 扩展 CWebUser 类 
在配置文件(一般为 protecte</div>
                                </li>
                                <li><a href="/article/2749.htm"
                                       title="未选之路" target="_blank">未选之路</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%97/1.htm">诗</a>
                                    <div>作者:罗伯特*费罗斯特 
  
黄色的树林里分出两条路, 
可惜我不能同时去涉足, 
我在那路口久久伫立, 
我向着一条路极目望去, 
直到它消失在丛林深处. 
  
但我却选了另外一条路, 
它荒草萋萋,十分幽寂; 
显得更诱人,更美丽, 
虽然在这两条小路上, 
都很少留下旅人的足迹. 
  
那天清晨落叶满地, 
两条路都未见脚印痕迹. 
呵,留下一条路等改日再</div>
                                </li>
                                <li><a href="/article/2876.htm"
                                       title="Java处理15位身份证变18位" target="_blank">Java处理15位身份证变18位</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/18%E4%BD%8D%E8%BA%AB%E4%BB%BD%E8%AF%81%E5%8F%9815%E4%BD%8D/1.htm">18位身份证变15位</a><a class="tag" taget="_blank" href="/search/15%E4%BD%8D%E8%BA%AB%E4%BB%BD%E8%AF%81%E5%8F%9818%E4%BD%8D/1.htm">15位身份证变18位</a><a class="tag" taget="_blank" href="/search/%E8%BA%AB%E4%BB%BD%E8%AF%81%E8%BD%AC%E6%8D%A2/1.htm">身份证转换</a>
                                    <div>  
15位身份证变18位,18位身份证变15位 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
蕃薯耀 201</div>
                                </li>
                                <li><a href="/article/3003.htm"
                                       title="SpringMVC4零配置--应用上下文配置【AppConfig】" target="_blank">SpringMVC4零配置--应用上下文配置【AppConfig】</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a>
                                    <div>从spring3.0开始,Spring将JavaConfig整合到核心模块,普通的POJO只需要标注@Configuration注解,就可以成为spring配置类,并通过在方法上标注@Bean注解的方式注入bean。 
  
Xml配置和Java类配置对比如下: 
applicationContext-AppConfig.xml 
  
<!-- 激活自动代理功能 参看:</div>
                                </li>
                                <li><a href="/article/3130.htm"
                                       title="Android中webview跟JAVASCRIPT中的交互" target="_blank">Android中webview跟JAVASCRIPT中的交互</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a>
                                    <div>  在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面举例说明之: 
 
1 JAVASCRIPT脚本调用android程序 
   要在webview中,调用addJavascriptInterface(OBJ,int</div>
                                </li>
                                <li><a href="/article/3257.htm"
                                       title="8个最佳Web开发资源推荐" target="_blank">8个最佳Web开发资源推荐</a>
                                    <span class="text-muted">lampcy</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a>
                                    <div>Web开发对程序员来说是一项较为复杂的工作,程序员需要快速地满足用户需求。如今很多的在线资源可以给程序员提供帮助,比如指导手册、在线课程和一些参考资料,而且这些资源基本都是免费和适合初学者的。无论你是需要选择一门新的编程语言,或是了解最新的标准,还是需要从其他地方找到一些灵感,我们这里为你整理了一些很好的Web开发资源,帮助你更成功地进行Web开发。 
这里列出10个最佳Web开发资源,它们都是受</div>
                                </li>
                                <li><a href="/article/3384.htm"
                                       title="架构师之面试------jdk的hashMap实现" target="_blank">架构师之面试------jdk的hashMap实现</a>
                                    <span class="text-muted">nannan408</span>
<a class="tag" taget="_blank" href="/search/HashMap/1.htm">HashMap</a>
                                    <div>1.前言。 
  如题。 
2.详述。 
  (1)hashMap算法就是数组链表。数组存放的元素是键值对。jdk通过移位算法(其实也就是简单的加乘算法),如下代码来生成数组下标(生成后indexFor一下就成下标了)。 
 

static int hash(int h) 
{ 
    h ^= (h >>> 20) ^ (h >>></div>
                                </li>
                                <li><a href="/article/3511.htm"
                                       title="html禁止清除input文本输入缓存" target="_blank">html禁止清除input文本输入缓存</a>
                                    <span class="text-muted">Rainbow702</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/input/1.htm">input</a><a class="tag" taget="_blank" href="/search/%E8%BE%93%E5%85%A5%E6%A1%86/1.htm">输入框</a><a class="tag" taget="_blank" href="/search/change/1.htm">change</a>
                                    <div>多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。    
如果不想让浏览器缓存input的值,有2种方法: 
方法一: 在不想使用缓存的input中添加 autocomplete="off";  
<input type="text" autocomplete="off" n</div>
                                </li>
                                <li><a href="/article/3638.htm"
                                       title="POJO和JavaBean的区别和联系" target="_blank">POJO和JavaBean的区别和联系</a>
                                    <span class="text-muted">tjmljw</span>
<a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a><a class="tag" taget="_blank" href="/search/java+beans/1.htm">java beans</a>
                                    <div>POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规</div>
                                </li>
                                <li><a href="/article/3765.htm"
                                       title="java中单例的五种写法" target="_blank">java中单例的五种写法</a>
                                    <span class="text-muted">liuxiaoling</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a>
                                    <div>/**
 * 单例模式的五种写法:
 * 1、懒汉
 * 2、恶汉
 * 3、静态内部类
 * 4、枚举
 * 5、双重校验锁
 */
/**
 * 五、 双重校验锁,在当前的内存模型中无效
 */
class LockSingleton
{

    private volatile static LockSingleton singleton;

    pri</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>