Merge pull request #1208 from apache/dev-postgresql
Merge dev postgreql to master
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5687b8e..e7dc1d2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,10 +29,10 @@
#string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}")
-SET(PACKAGE_VERSION 4.2.0) # ${VERSION})
-SET(VERSION 4.2.0)
+SET(PACKAGE_VERSION 4.3.0) # ${VERSION})
+SET(VERSION 4.3.0)
SET(SINGA_MAJOR_VERSION 4)
-SET(SINGA_MINOR_VERSION 2)
+SET(SINGA_MINOR_VERSION 3)
SET(SINGA_PATCH_VERSION 0)
#SET(SINGA_MAJOR_VERSION ${VERSION_MAJOR}) # 0 -
#SET(SINGA_MINOR_VERSION ${VERSION_MINOR}) # 0 - 9
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index b475aed..fe93846 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,3 +1,31 @@
+Release Notes - SINGA - Version singa-4.3.0
+
+SINGA is a distributed deep learning library.
+
+This release includes following changes:
+
+ * Add the implementation for the Transformer example.
+
+ * Enhance examples
+ * Update the readme file for the dynamic model slicing example.
+ * Update the HFL example by setting the maximum number of epochs.
+ * Add the multiprocess training implementation for the cnn ms example.
+ * Add the sparsification version of the model for the cnn ms example.
+
+ * Extend the matrix multiplication operator to more dimensions.
+
+ * Update the data types and tensor operations for model training.
+
+ * Add the implementation for the new sum error loss.
+
+ * Update the website
+ * Add the news for the SIGMOD Systems Award.
+
+ * Fix bugs
+ * Fix the Github Actions for online code testing.
+
+----------------------------------------------------------------------------------------------
+
Release Notes - SINGA - Version singa-4.2.0
SINGA is a distributed deep learning library.
diff --git a/examples/cnn_ms/autograd/mnist_cnn.py b/examples/cnn_ms/autograd/mnist_cnn.py
new file mode 100644
index 0000000..16752ce
--- /dev/null
+++ b/examples/cnn_ms/autograd/mnist_cnn.py
@@ -0,0 +1,304 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from singa import singa_wrap as singa
+from singa import autograd
+from singa import layer
+from singa import tensor
+from singa import device
+from singa import opt
+import numpy as np
+import os
+import sys
+import gzip
+import codecs
+import time
+
+
+class CNN:
+
+ def __init__(self):
+ self.conv1 = layer.Conv2d(1, 20, 5, padding=0)
+ self.conv2 = layer.Conv2d(20, 50, 5, padding=0)
+ self.linear1 = layer.Linear(4 * 4 * 50, 500)
+ self.linear2 = layer.Linear(500, 10)
+ self.pooling1 = layer.MaxPool2d(2, 2, padding=0)
+ self.pooling2 = layer.MaxPool2d(2, 2, padding=0)
+ self.relu1 = layer.ReLU()
+ self.relu2 = layer.ReLU()
+ self.relu3 = layer.ReLU()
+ self.flatten = layer.Flatten()
+
+ def forward(self, x):
+ y = self.conv1(x)
+ y = self.relu1(y)
+ y = self.pooling1(y)
+ y = self.conv2(y)
+ y = self.relu2(y)
+ y = self.pooling2(y)
+ y = self.flatten(y)
+ y = self.linear1(y)
+ y = self.relu3(y)
+ y = self.linear2(y)
+ return y
+
+
+def check_dataset_exist(dirpath):
+ if not os.path.exists(dirpath):
+ print(
+ 'The MNIST dataset does not exist. Please download the mnist dataset using download_mnist.py (e.g. python3 download_mnist.py)'
+ )
+ sys.exit(0)
+ return dirpath
+
+
+def load_dataset():
+ train_x_path = '/tmp/train-images-idx3-ubyte.gz'
+ train_y_path = '/tmp/train-labels-idx1-ubyte.gz'
+ valid_x_path = '/tmp/t10k-images-idx3-ubyte.gz'
+ valid_y_path = '/tmp/t10k-labels-idx1-ubyte.gz'
+
+ train_x = read_image_file(check_dataset_exist(train_x_path)).astype(
+ np.float32)
+ train_y = read_label_file(check_dataset_exist(train_y_path)).astype(
+ np.float32)
+ valid_x = read_image_file(check_dataset_exist(valid_x_path)).astype(
+ np.float32)
+ valid_y = read_label_file(check_dataset_exist(valid_y_path)).astype(
+ np.float32)
+ return train_x, train_y, valid_x, valid_y
+
+
+def read_label_file(path):
+ with gzip.open(path, 'rb') as f:
+ data = f.read()
+ assert get_int(data[:4]) == 2049
+ length = get_int(data[4:8])
+ parsed = np.frombuffer(data, dtype=np.uint8, offset=8).reshape((length))
+ return parsed
+
+
+def get_int(b):
+ return int(codecs.encode(b, 'hex'), 16)
+
+
+def read_image_file(path):
+ with gzip.open(path, 'rb') as f:
+ data = f.read()
+ assert get_int(data[:4]) == 2051
+ length = get_int(data[4:8])
+ num_rows = get_int(data[8:12])
+ num_cols = get_int(data[12:16])
+ parsed = np.frombuffer(data, dtype=np.uint8, offset=16).reshape(
+ (length, 1, num_rows, num_cols))
+ return parsed
+
+
+def to_categorical(y, num_classes):
+ y = np.array(y, dtype="int")
+ n = y.shape[0]
+ categorical = np.zeros((n, num_classes))
+ categorical[np.arange(n), y] = 1
+ categorical = categorical.astype(np.float32)
+ return categorical
+
+
+def accuracy(pred, target):
+ y = np.argmax(pred, axis=1)
+ t = np.argmax(target, axis=1)
+ a = y == t
+ return np.array(a, "int").sum()
+
+
+# Function to all reduce NUMPY accuracy and loss from multiple devices
+def reduce_variable(variable, dist_opt, reducer):
+ reducer.copy_from_numpy(variable)
+ dist_opt.all_reduce(reducer.data)
+ dist_opt.wait()
+ output = tensor.to_numpy(reducer)
+ return output
+
+
+# Function to sychronize SINGA TENSOR initial model parameters
+def synchronize(tensor, dist_opt):
+ dist_opt.all_reduce(tensor.data)
+ dist_opt.wait()
+ tensor /= dist_opt.world_size
+
+
+# Data augmentation
+def augmentation(x, batch_size):
+ xpad = np.pad(x, [[0, 0], [0, 0], [4, 4], [4, 4]], 'symmetric')
+ for data_num in range(0, batch_size):
+ offset = np.random.randint(8, size=2)
+ x[data_num, :, :, :] = xpad[data_num, :, offset[0]:offset[0] + 28,
+ offset[1]:offset[1] + 28]
+ if_flip = np.random.randint(2)
+ if (if_flip):
+ x[data_num, :, :, :] = x[data_num, :, :, ::-1]
+ return x
+
+
+# Data partition
+def data_partition(dataset_x, dataset_y, global_rank, world_size):
+ data_per_rank = dataset_x.shape[0] // world_size
+ idx_start = global_rank * data_per_rank
+ idx_end = (global_rank + 1) * data_per_rank
+ return dataset_x[idx_start:idx_end], dataset_y[idx_start:idx_end]
+
+
+def train_mnist_cnn(DIST=False,
+ local_rank=None,
+ world_size=None,
+ nccl_id=None,
+ spars=0,
+ topK=False,
+ corr=True):
+
+ # Define the hypermeters for the mnist_cnn
+ max_epoch = 10
+ batch_size = 64
+ sgd = opt.SGD(lr=0.005, momentum=0.9, weight_decay=1e-5)
+
+ # Prepare training and valadiation data
+ train_x, train_y, test_x, test_y = load_dataset()
+ IMG_SIZE = 28
+ num_classes = 10
+ train_y = to_categorical(train_y, num_classes)
+ test_y = to_categorical(test_y, num_classes)
+
+ # Normalization
+ train_x = train_x / 255
+ test_x = test_x / 255
+
+ if DIST:
+ # For distributed GPU training
+ sgd = opt.DistOpt(sgd,
+ nccl_id=nccl_id,
+ local_rank=local_rank,
+ world_size=world_size)
+ dev = device.create_cuda_gpu_on(sgd.local_rank)
+
+ # Dataset partition for distributed training
+ train_x, train_y = data_partition(train_x, train_y, sgd.global_rank,
+ sgd.world_size)
+ test_x, test_y = data_partition(test_x, test_y, sgd.global_rank,
+ sgd.world_size)
+ world_size = sgd.world_size
+ else:
+ # For single GPU
+ dev = device.create_cuda_gpu()
+ world_size = 1
+
+ # Create model
+ model = CNN()
+
+ tx = tensor.Tensor((batch_size, 1, IMG_SIZE, IMG_SIZE), dev, tensor.float32)
+ ty = tensor.Tensor((batch_size, num_classes), dev, tensor.int32)
+ num_train_batch = train_x.shape[0] // batch_size
+ num_test_batch = test_x.shape[0] // batch_size
+ idx = np.arange(train_x.shape[0], dtype=np.int32)
+
+ if DIST:
+ #Sychronize the initial parameters
+ autograd.training = True
+ x = np.random.randn(batch_size, 1, IMG_SIZE,
+ IMG_SIZE).astype(np.float32)
+ y = np.zeros(shape=(batch_size, num_classes), dtype=np.int32)
+ tx.copy_from_numpy(x)
+ ty.copy_from_numpy(y)
+ out = model.forward(tx)
+ loss = autograd.softmax_cross_entropy(out, ty)
+ for p, g in autograd.backward(loss):
+ synchronize(p, sgd)
+
+ # Training and evaulation loop
+ for epoch in range(max_epoch):
+ start_time = time.time()
+ np.random.shuffle(idx)
+
+ if ((DIST == False) or (sgd.global_rank == 0)):
+ print('Starting Epoch %d:' % (epoch))
+
+ # Training phase
+ autograd.training = True
+ train_correct = np.zeros(shape=[1], dtype=np.float32)
+ test_correct = np.zeros(shape=[1], dtype=np.float32)
+ train_loss = np.zeros(shape=[1], dtype=np.float32)
+
+ for b in range(num_train_batch):
+ x = train_x[idx[b * batch_size:(b + 1) * batch_size]]
+ x = augmentation(x, batch_size)
+ y = train_y[idx[b * batch_size:(b + 1) * batch_size]]
+ tx.copy_from_numpy(x)
+ ty.copy_from_numpy(y)
+ out = model.forward(tx)
+ loss = autograd.softmax_cross_entropy(out, ty)
+ train_correct += accuracy(tensor.to_numpy(out), y)
+ train_loss += tensor.to_numpy(loss)[0]
+ if DIST:
+ if (spars == 0):
+ sgd.backward_and_update(loss, threshold=50000)
+ else:
+ sgd.backward_and_sparse_update(loss,
+ spars=spars,
+ topK=topK,
+ corr=corr)
+ else:
+ sgd(loss)
+
+ if DIST:
+ # Reduce the evaluation accuracy and loss from multiple devices
+ reducer = tensor.Tensor((1,), dev, tensor.float32)
+ train_correct = reduce_variable(train_correct, sgd, reducer)
+ train_loss = reduce_variable(train_loss, sgd, reducer)
+
+ # Output the training loss and accuracy
+ if ((DIST == False) or (sgd.global_rank == 0)):
+ print('Training loss = %f, training accuracy = %f' %
+ (train_loss, train_correct /
+ (num_train_batch * batch_size * world_size)),
+ flush=True)
+
+ # Evaluation phase
+ autograd.training = False
+ for b in range(num_test_batch):
+ x = test_x[b * batch_size:(b + 1) * batch_size]
+ y = test_y[b * batch_size:(b + 1) * batch_size]
+ tx.copy_from_numpy(x)
+ ty.copy_from_numpy(y)
+ out_test = model.forward(tx)
+ test_correct += accuracy(tensor.to_numpy(out_test), y)
+
+ if DIST:
+ # Reduce the evaulation accuracy from multiple devices
+ test_correct = reduce_variable(test_correct, sgd, reducer)
+
+ # Output the evaluation accuracy
+ if ((DIST == False) or (sgd.global_rank == 0)):
+ print('Evaluation accuracy = %f, Elapsed Time = %fs' %
+ (test_correct / (num_test_batch * batch_size * world_size),
+ time.time() - start_time),
+ flush=True)
+
+
+if __name__ == '__main__':
+
+ DIST = False
+ train_mnist_cnn(DIST=DIST)
diff --git a/examples/cnn_ms/autograd/mnist_dist.py b/examples/cnn_ms/autograd/mnist_dist.py
new file mode 100644
index 0000000..3586127
--- /dev/null
+++ b/examples/cnn_ms/autograd/mnist_dist.py
@@ -0,0 +1,25 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from mnist_cnn import *
+
+if __name__ == '__main__':
+
+ DIST = True
+ train_mnist_cnn(DIST=DIST)
diff --git a/examples/cnn_ms/autograd/mnist_multiprocess.py b/examples/cnn_ms/autograd/mnist_multiprocess.py
new file mode 100644
index 0000000..a1a1fe5
--- /dev/null
+++ b/examples/cnn_ms/autograd/mnist_multiprocess.py
@@ -0,0 +1,39 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from mnist_cnn import *
+import multiprocessing
+import sys
+
+if __name__ == '__main__':
+
+ # Generate a NCCL ID to be used for collective communication
+ nccl_id = singa.NcclIdHolder()
+
+ # Number of GPUs to be used
+ world_size = int(sys.argv[1])
+
+ process = []
+ for local_rank in range(0, world_size):
+ process.append(
+ multiprocessing.Process(target=train_mnist_cnn,
+ args=(True, local_rank, world_size, nccl_id)))
+
+ for p in process:
+ p.start()
\ No newline at end of file
diff --git a/examples/cnn_ms/autograd/resnet_cifar10.py b/examples/cnn_ms/autograd/resnet_cifar10.py
new file mode 100644
index 0000000..d71e0f2
--- /dev/null
+++ b/examples/cnn_ms/autograd/resnet_cifar10.py
@@ -0,0 +1,292 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+try:
+ import pickle
+except ImportError:
+ import cPickle as pickle
+
+from singa import singa_wrap as singa
+from singa import autograd
+from singa import tensor
+from singa import device
+from singa import opt
+from PIL import Image
+import numpy as np
+import os
+import sys
+import time
+
+
+def load_dataset(filepath):
+ with open(filepath, 'rb') as fd:
+ try:
+ cifar10 = pickle.load(fd, encoding='latin1')
+ except TypeError:
+ cifar10 = pickle.load(fd)
+ image = cifar10['data'].astype(dtype=np.uint8)
+ image = image.reshape((-1, 3, 32, 32))
+ label = np.asarray(cifar10['labels'], dtype=np.uint8)
+ label = label.reshape(label.size, 1)
+ return image, label
+
+
+def load_train_data(dir_path='cifar-10-batches-py', num_batches=5):
+ labels = []
+ batchsize = 10000
+ images = np.empty((num_batches * batchsize, 3, 32, 32), dtype=np.uint8)
+ for did in range(1, num_batches + 1):
+ fname_train_data = dir_path + "/data_batch_{}".format(did)
+ image, label = load_dataset(check_dataset_exist(fname_train_data))
+ images[(did - 1) * batchsize:did * batchsize] = image
+ labels.extend(label)
+ images = np.array(images, dtype=np.float32)
+ labels = np.array(labels, dtype=np.int32)
+ return images, labels
+
+
+def load_test_data(dir_path='cifar-10-batches-py'):
+ images, labels = load_dataset(check_dataset_exist(dir_path + "/test_batch"))
+ return np.array(images, dtype=np.float32), np.array(labels, dtype=np.int32)
+
+
+def check_dataset_exist(dirpath):
+ if not os.path.exists(dirpath):
+ print(
+ 'Please download the cifar10 dataset using download_data.py (e.g. python ~/singa/examples/cifar10/download_data.py py)'
+ )
+ sys.exit(0)
+ return dirpath
+
+
+def normalize_for_resnet(train_x, test_x):
+ mean = [0.4914, 0.4822, 0.4465]
+ std = [0.2023, 0.1994, 0.2010]
+ train_x /= 255
+ test_x /= 255
+ for ch in range(0, 2):
+ train_x[:, ch, :, :] -= mean[ch]
+ train_x[:, ch, :, :] /= std[ch]
+ test_x[:, ch, :, :] -= mean[ch]
+ test_x[:, ch, :, :] /= std[ch]
+ return train_x, test_x
+
+
+def resize_dataset(x, IMG_SIZE):
+ num_data = x.shape[0]
+ dim = x.shape[1]
+ X = np.zeros(shape=(num_data, dim, IMG_SIZE, IMG_SIZE), dtype=np.float32)
+ for n in range(0, num_data):
+ for d in range(0, dim):
+ X[n, d, :, :] = np.array(Image.fromarray(x[n, d, :, :]).resize(
+ (IMG_SIZE, IMG_SIZE), Image.BILINEAR),
+ dtype=np.float32)
+ return X
+
+
+def augmentation(x, batch_size):
+ xpad = np.pad(x, [[0, 0], [0, 0], [4, 4], [4, 4]], 'symmetric')
+ for data_num in range(0, batch_size):
+ offset = np.random.randint(8, size=2)
+ x[data_num, :, :, :] = xpad[data_num, :, offset[0]:offset[0] + 32,
+ offset[1]:offset[1] + 32]
+ if_flip = np.random.randint(2)
+ if (if_flip):
+ x[data_num, :, :, :] = x[data_num, :, :, ::-1]
+ return x
+
+
+def accuracy(pred, target):
+ y = np.argmax(pred, axis=1)
+ t = np.argmax(target, axis=1)
+ a = y == t
+ return np.array(a, "int").sum()
+
+
+def to_categorical(y, num_classes):
+ y = np.array(y, dtype="int")
+ n = y.shape[0]
+ categorical = np.zeros((n, num_classes))
+ for i in range(0, n):
+ categorical[i, y[i]] = 1
+ categorical = categorical.astype(np.float32)
+ return categorical
+
+
+# Function to all reduce NUMPY accuracy and loss from multiple devices
+def reduce_variable(variable, dist_opt, reducer):
+ reducer.copy_from_numpy(variable)
+ dist_opt.all_reduce(reducer.data)
+ dist_opt.wait()
+ output = tensor.to_numpy(reducer)
+ return output
+
+
+# Function to sychronize SINGA TENSOR initial model parameters
+def synchronize(tensor, dist_opt):
+ dist_opt.all_reduce(tensor.data)
+ dist_opt.wait()
+ tensor /= dist_opt.world_size
+
+
+# Data partition
+def data_partition(dataset_x, dataset_y, global_rank, world_size):
+ data_per_rank = dataset_x.shape[0] // world_size
+ idx_start = global_rank * data_per_rank
+ idx_end = (global_rank + 1) * data_per_rank
+ return dataset_x[idx_start:idx_end], dataset_y[idx_start:idx_end]
+
+
+def train_cifar10(DIST=False,
+ local_rank=None,
+ world_size=None,
+ nccl_id=None,
+ partial_update=False):
+
+ # Define the hypermeters for the train_cifar10
+ sgd = opt.SGD(lr=0.005, momentum=0.9, weight_decay=1e-5)
+ max_epoch = 5
+ batch_size = 32
+
+ train_x, train_y = load_train_data()
+ test_x, test_y = load_test_data()
+ train_x, test_x = normalize_for_resnet(train_x, test_x)
+ IMG_SIZE = 224
+ num_classes = 10
+
+ if DIST:
+ # For distributed GPU training
+ sgd = opt.DistOpt(sgd,
+ nccl_id=nccl_id,
+ local_rank=local_rank,
+ world_size=world_size)
+ dev = device.create_cuda_gpu_on(sgd.local_rank)
+
+ # Dataset partition for distributed training
+ train_x, train_y = data_partition(train_x, train_y, sgd.global_rank,
+ sgd.world_size)
+ test_x, test_y = data_partition(test_x, test_y, sgd.global_rank,
+ sgd.world_size)
+ world_size = sgd.world_size
+ else:
+ # For single GPU
+ dev = device.create_cuda_gpu()
+ world_size = 1
+
+ from resnet import resnet50
+ model = resnet50(num_classes=num_classes)
+
+ tx = tensor.Tensor((batch_size, 3, IMG_SIZE, IMG_SIZE), dev, tensor.float32)
+ ty = tensor.Tensor((batch_size,), dev, tensor.int32)
+ num_train_batch = train_x.shape[0] // batch_size
+ num_test_batch = test_x.shape[0] // batch_size
+ idx = np.arange(train_x.shape[0], dtype=np.int32)
+
+ if DIST:
+ # Sychronize the initial parameters
+ autograd.training = True
+ x = np.random.randn(batch_size, 3, IMG_SIZE,
+ IMG_SIZE).astype(np.float32)
+ y = np.zeros(shape=(batch_size,), dtype=np.int32)
+ tx.copy_from_numpy(x)
+ ty.copy_from_numpy(y)
+ out = model(tx)
+ loss = autograd.softmax_cross_entropy(out, ty)
+ param = []
+ for p, _ in autograd.backward(loss):
+ synchronize(p, sgd)
+ param.append(p)
+
+ for epoch in range(max_epoch):
+ start_time = time.time()
+ np.random.shuffle(idx)
+
+ if ((DIST == False) or (sgd.global_rank == 0)):
+ print('Starting Epoch %d:' % (epoch))
+
+ # Training phase
+ autograd.training = True
+ train_correct = np.zeros(shape=[1], dtype=np.float32)
+ test_correct = np.zeros(shape=[1], dtype=np.float32)
+ train_loss = np.zeros(shape=[1], dtype=np.float32)
+
+ for b in range(num_train_batch):
+ x = train_x[idx[b * batch_size:(b + 1) * batch_size]]
+ x = augmentation(x, batch_size)
+ x = resize_dataset(x, IMG_SIZE)
+ y = train_y[idx[b * batch_size:(b + 1) * batch_size]]
+ tx.copy_from_numpy(x)
+ ty.copy_from_numpy(y)
+ out = model(tx)
+ loss = autograd.softmax_cross_entropy(out, ty)
+ train_correct += accuracy(tensor.to_numpy(out),
+ to_categorical(y, num_classes)).astype(
+ np.float32)
+ train_loss += tensor.to_numpy(loss)[0]
+ if not partial_update:
+ sgd.backward_and_update(loss)
+ else:
+ sgd.backward_and_partial_update(loss)
+
+ if DIST:
+ # Reduce the evaluation accuracy and loss from multiple devices
+ reducer = tensor.Tensor((1,), dev, tensor.float32)
+ train_correct = reduce_variable(train_correct, sgd, reducer)
+ train_loss = reduce_variable(train_loss, sgd, reducer)
+
+ # Output the training loss and accuracy
+ if ((DIST == False) or (sgd.global_rank == 0)):
+ print('Training loss = %f, training accuracy = %f' %
+ (train_loss, train_correct /
+ (num_train_batch * batch_size * world_size)),
+ flush=True)
+
+ if partial_update:
+ # Sychronize parameters before evaluation phase
+ for p in param:
+ synchronize(p, sgd)
+
+ # Evaulation phase
+ autograd.training = False
+ for b in range(num_test_batch):
+ x = test_x[b * batch_size:(b + 1) * batch_size]
+ x = resize_dataset(x, IMG_SIZE)
+ y = test_y[b * batch_size:(b + 1) * batch_size]
+ tx.copy_from_numpy(x)
+ ty.copy_from_numpy(y)
+ out_test = model(tx)
+ test_correct += accuracy(tensor.to_numpy(out_test),
+ to_categorical(y, num_classes))
+
+ if DIST:
+ # Reduce the evaulation accuracy from multiple devices
+ test_correct = reduce_variable(test_correct, sgd, reducer)
+
+ # Output the evaluation accuracy
+ if ((DIST == False) or (sgd.global_rank == 0)):
+ print('Evaluation accuracy = %f, Elapsed Time = %fs' %
+ (test_correct / (num_test_batch * batch_size * world_size),
+ time.time() - start_time),
+ flush=True)
+
+
+if __name__ == '__main__':
+
+ DIST = False
+ train_cifar10(DIST=DIST)
diff --git a/examples/cnn_ms/autograd/resnet_dist.py b/examples/cnn_ms/autograd/resnet_dist.py
new file mode 100644
index 0000000..6f9b56c
--- /dev/null
+++ b/examples/cnn_ms/autograd/resnet_dist.py
@@ -0,0 +1,87 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# the code is modified from
+# https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py
+
+from singa import autograd
+from singa import tensor
+from singa import device
+from singa import opt
+
+import numpy as np
+from tqdm import trange
+
+if __name__ == "__main__":
+ sgd = opt.SGD(lr=0.1, momentum=0.9, weight_decay=1e-5)
+ sgd = opt.DistOpt(sgd)
+
+ if (sgd.global_rank == 0):
+ print("Start intialization...........", flush=True)
+
+ dev = device.create_cuda_gpu_on(sgd.local_rank)
+
+ from resnet import resnet50
+ model = resnet50()
+
+ niters = 100
+ batch_size = 32
+ IMG_SIZE = 224
+
+ tx = tensor.Tensor((batch_size, 3, IMG_SIZE, IMG_SIZE), dev)
+ ty = tensor.Tensor((batch_size,), dev, tensor.int32)
+ autograd.training = True
+ x = np.random.randn(batch_size, 3, IMG_SIZE, IMG_SIZE).astype(np.float32)
+ y = np.random.randint(0, 1000, batch_size, dtype=np.int32)
+ tx.copy_from_numpy(x)
+ ty.copy_from_numpy(y)
+
+ import time
+
+ dev.Sync()
+ start = time.time()
+ fd = 0
+ softmax = 0
+ update = 0
+ with trange(niters) as t:
+ for _ in t:
+ dev.Sync()
+ tick = time.time()
+ x = model(tx)
+ dev.Sync()
+ fd += time.time() - tick
+ tick = time.time()
+ loss = autograd.softmax_cross_entropy(x, ty)
+ dev.Sync()
+ softmax += time.time() - tick
+ sgd.backward_and_update(loss)
+
+ dev.Sync()
+ end = time.time()
+ throughput = float(sgd.world_size * niters * batch_size) / (end - start)
+ titer = (end - start) / float(niters)
+ tforward = float(fd) / float(niters)
+ tsoftmax = float(softmax) / float(niters)
+ tbackward = titer - tforward - tsoftmax
+
+ if (sgd.global_rank == 0):
+ print("\nThroughput = {} per second".format(throughput), flush=True)
+ print("Total={}, forward={}, softmax={}, backward={}".format(
+ titer, tforward, tsoftmax, tbackward),
+ flush=True)
diff --git a/examples/cnn_ms/autograd/sparsification_mnist.py b/examples/cnn_ms/autograd/sparsification_mnist.py
new file mode 100644
index 0000000..315605a
--- /dev/null
+++ b/examples/cnn_ms/autograd/sparsification_mnist.py
@@ -0,0 +1,45 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from mnist_cnn import *
+import multiprocessing
+import sys
+
+if __name__ == '__main__':
+
+ # Generate a NCCL ID to be used for collective communication
+ nccl_id = singa.NcclIdHolder()
+
+ # Number of GPUs to be used
+ world_size = int(sys.argv[1])
+
+ # Use sparsification with parameters
+ topK = False # When topK = False, Sparsification based on a constant absolute threshold
+ corr = True # If True, uses local accumulate gradient for the correction
+ sparsThreshold = 0.05 # The constant absolute threshold for sparsification
+
+ process = []
+ for local_rank in range(0, world_size):
+ process.append(
+ multiprocessing.Process(target=train_mnist_cnn,
+ args=(True, local_rank, world_size, nccl_id,
+ sparsThreshold, topK, corr)))
+
+ for p in process:
+ p.start()
diff --git a/examples/cnn_ms/data/cifar10.py b/examples/cnn_ms/data/cifar10.py
new file mode 100644
index 0000000..74230d0
--- /dev/null
+++ b/examples/cnn_ms/data/cifar10.py
@@ -0,0 +1,89 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+try:
+ import pickle
+except ImportError:
+ import cPickle as pickle
+
+import numpy as np
+import os
+import sys
+
+
+def load_dataset(filepath):
+ with open(filepath, 'rb') as fd:
+ try:
+ cifar10 = pickle.load(fd, encoding='latin1')
+ except TypeError:
+ cifar10 = pickle.load(fd)
+ image = cifar10['data'].astype(dtype=np.uint8)
+ image = image.reshape((-1, 3, 32, 32))
+ label = np.asarray(cifar10['labels'], dtype=np.uint8)
+ label = label.reshape(label.size, 1)
+ return image, label
+
+
+def load_train_data(dir_path='/tmp/cifar-10-batches-py', num_batches=5): # need to save to specific local directories
+ labels = []
+ batchsize = 10000
+ images = np.empty((num_batches * batchsize, 3, 32, 32), dtype=np.uint8)
+ for did in range(1, num_batches + 1):
+ fname_train_data = dir_path + "/data_batch_{}".format(did)
+ image, label = load_dataset(check_dataset_exist(fname_train_data))
+ images[(did - 1) * batchsize:did * batchsize] = image
+ labels.extend(label)
+ images = np.array(images, dtype=np.float32)
+ labels = np.array(labels, dtype=np.int32)
+ return images, labels
+
+
+def load_test_data(dir_path='/tmp/cifar-10-batches-py'): # need to save to specific local directories
+ images, labels = load_dataset(check_dataset_exist(dir_path + "/test_batch"))
+ return np.array(images, dtype=np.float32), np.array(labels, dtype=np.int32)
+
+
+def check_dataset_exist(dirpath):
+ if not os.path.exists(dirpath):
+ print(
+ 'Please download the cifar10 dataset using python data/download_cifar10.py'
+ )
+ sys.exit(0)
+ return dirpath
+
+
+def normalize(train_x, val_x):
+ mean = [0.4914, 0.4822, 0.4465]
+ std = [0.2023, 0.1994, 0.2010]
+ train_x /= 255
+ val_x /= 255
+ for ch in range(0, 2):
+ train_x[:, ch, :, :] -= mean[ch]
+ train_x[:, ch, :, :] /= std[ch]
+ val_x[:, ch, :, :] -= mean[ch]
+ val_x[:, ch, :, :] /= std[ch]
+ return train_x, val_x
+
+def load():
+ train_x, train_y = load_train_data()
+ val_x, val_y = load_test_data()
+ train_x, val_x = normalize(train_x, val_x)
+ train_y = train_y.flatten()
+ val_y = val_y.flatten()
+ return train_x, train_y, val_x, val_y
diff --git a/examples/cnn_ms/data/cifar100.py b/examples/cnn_ms/data/cifar100.py
new file mode 100644
index 0000000..b9f121b
--- /dev/null
+++ b/examples/cnn_ms/data/cifar100.py
@@ -0,0 +1,81 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+try:
+ import pickle
+except ImportError:
+ import cPickle as pickle
+
+import numpy as np
+import os
+import sys
+
+
+def load_dataset(filepath):
+ with open(filepath, 'rb') as fd:
+ try:
+ cifar100 = pickle.load(fd, encoding='latin1')
+ except TypeError:
+ cifar100 = pickle.load(fd)
+ image = cifar100['data'].astype(dtype=np.uint8)
+ image = image.reshape((-1, 3, 32, 32))
+ label = np.asarray(cifar100['fine_labels'], dtype=np.uint8)
+ label = label.reshape(label.size, 1)
+ return image, label
+
+
+def load_train_data(dir_path='/tmp/cifar-100-python'):
+ images, labels = load_dataset(check_dataset_exist(dir_path + "/train"))
+ return np.array(images, dtype=np.float32), np.array(labels, dtype=np.int32)
+
+
+def load_test_data(dir_path='/tmp/cifar-100-python'):
+ images, labels = load_dataset(check_dataset_exist(dir_path + "/test"))
+ return np.array(images, dtype=np.float32), np.array(labels, dtype=np.int32)
+
+
+def check_dataset_exist(dirpath):
+ if not os.path.exists(dirpath):
+ print(
+ 'Please download the cifar100 dataset using python data/download_cifar100.py'
+ )
+ sys.exit(0)
+ return dirpath
+
+
+def normalize(train_x, val_x):
+ mean = [0.4914, 0.4822, 0.4465]
+ std = [0.2023, 0.1994, 0.2010]
+ train_x /= 255
+ val_x /= 255
+ for ch in range(0, 2):
+ train_x[:, ch, :, :] -= mean[ch]
+ train_x[:, ch, :, :] /= std[ch]
+ val_x[:, ch, :, :] -= mean[ch]
+ val_x[:, ch, :, :] /= std[ch]
+ return train_x, val_x
+
+
+def load():
+ train_x, train_y = load_train_data()
+ val_x, val_y = load_test_data()
+ train_x, val_x = normalize(train_x, val_x)
+ train_y = train_y.flatten()
+ val_y = val_y.flatten()
+ return train_x, train_y, val_x, val_y
diff --git a/examples/cnn_ms/data/download_cifar10.py b/examples/cnn_ms/data/download_cifar10.py
new file mode 100644
index 0000000..3a597be
--- /dev/null
+++ b/examples/cnn_ms/data/download_cifar10.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import print_function
+from future import standard_library
+standard_library.install_aliases()
+import urllib.request, urllib.parse, urllib.error
+import tarfile
+import os
+import sys
+
+
+def extract_tarfile(filepath):
+ if os.path.exists(filepath):
+ print('The tar file does exist. Extracting it now..')
+ with tarfile.open(filepath, 'r') as f:
+ f.extractall('/tmp/') # need to specify a local directory
+ print('Finished!')
+ sys.exit(0)
+
+
+def do_download(dirpath, gzfile, url):
+ print('Downloading CIFAR from %s' % (url))
+ urllib.request.urlretrieve(url, gzfile)
+ extract_tarfile(gzfile)
+ print('Finished!')
+
+
+if __name__ == '__main__':
+ dirpath = '/tmp/' # need to specify a local directory
+ gzfile = dirpath + 'cifar-10-python.tar.gz'
+ url = 'http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz'
+ do_download(dirpath, gzfile, url)
\ No newline at end of file
diff --git a/examples/cnn_ms/data/download_cifar100.py b/examples/cnn_ms/data/download_cifar100.py
new file mode 100644
index 0000000..5f1e21b
--- /dev/null
+++ b/examples/cnn_ms/data/download_cifar100.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from download_cifar10 import do_download
+
+if __name__ == '__main__':
+ dirpath = '/tmp/' # need to specify a local directory
+ gzfile = dirpath + 'cifar-100-python.tar.gz'
+ url = 'http://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz'
+ do_download(dirpath, gzfile, url)
diff --git a/examples/cnn_ms/data/download_mnist.py b/examples/cnn_ms/data/download_mnist.py
new file mode 100644
index 0000000..137461a
--- /dev/null
+++ b/examples/cnn_ms/data/download_mnist.py
@@ -0,0 +1,49 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import os
+import urllib.request
+
+
+def check_exist_or_download(url):
+
+ download_dir = '/tmp/'
+ name = url.rsplit('/', 1)[-1]
+ filename = os.path.join(download_dir, name)
+
+ if not os.path.isfile(filename):
+ print("Downloading %s" % url)
+ urllib.request.urlretrieve(url, filename)
+ else:
+ print("Already Downloaded: %s" % url)
+
+
+if __name__ == '__main__':
+
+ #url of the mnist dataset
+ train_x_url = 'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz'
+ train_y_url = 'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz'
+ valid_x_url = 'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz'
+ valid_y_url = 'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'
+
+ #download the mnist dataset
+ check_exist_or_download(train_x_url)
+ check_exist_or_download(train_y_url)
+ check_exist_or_download(valid_x_url)
+ check_exist_or_download(valid_y_url)
\ No newline at end of file
diff --git a/examples/cnn_ms/data/mnist.py b/examples/cnn_ms/data/mnist.py
new file mode 100644
index 0000000..071d45d
--- /dev/null
+++ b/examples/cnn_ms/data/mnist.py
@@ -0,0 +1,92 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import numpy as np
+import os
+import sys
+import gzip
+import codecs
+
+
+def check_dataset_exist(dirpath):
+ if not os.path.exists(dirpath):
+ print(
+ 'The MNIST dataset does not exist. Please download the mnist dataset using python data/download_mnist.py'
+ )
+ sys.exit(0)
+ return dirpath
+
+
+def load_dataset():
+ train_x_path = '/tmp/train-images-idx3-ubyte.gz' # need to change to local disk
+ train_y_path = '/tmp/train-labels-idx1-ubyte.gz' # need to change to local disk
+ valid_x_path = '/tmp/t10k-images-idx3-ubyte.gz' # need to change to local disk
+ valid_y_path = '/tmp/t10k-labels-idx1-ubyte.gz' # need to change to local disk
+
+ train_x = read_image_file(check_dataset_exist(train_x_path)).astype(
+ np.float32)
+ train_y = read_label_file(check_dataset_exist(train_y_path)).astype(
+ np.float32)
+ valid_x = read_image_file(check_dataset_exist(valid_x_path)).astype(
+ np.float32)
+ valid_y = read_label_file(check_dataset_exist(valid_y_path)).astype(
+ np.float32)
+ return train_x, train_y, valid_x, valid_y
+
+
+def read_label_file(path):
+ with gzip.open(path, 'rb') as f:
+ data = f.read()
+ assert get_int(data[:4]) == 2049
+ length = get_int(data[4:8])
+ parsed = np.frombuffer(data, dtype=np.uint8, offset=8).reshape((length))
+ return parsed
+
+
+def get_int(b):
+ return int(codecs.encode(b, 'hex'), 16)
+
+
+def read_image_file(path):
+ with gzip.open(path, 'rb') as f:
+ data = f.read()
+ assert get_int(data[:4]) == 2051
+ length = get_int(data[4:8])
+ num_rows = get_int(data[8:12])
+ num_cols = get_int(data[12:16])
+ parsed = np.frombuffer(data, dtype=np.uint8, offset=16).reshape(
+ (length, 1, num_rows, num_cols))
+ return parsed
+
+
+def normalize(train_x, val_x):
+ train_x /= 255
+ val_x /= 255
+ return train_x, val_x
+
+
+def load():
+ train_x, train_y, val_x, val_y = load_dataset()
+ train_x, val_x = normalize(train_x, val_x)
+ train_x = train_x.astype(np.float32)
+ val_x = val_x.astype(np.float32)
+ train_y = train_y.astype(np.int32)
+ val_y = val_y.astype(np.int32)
+ return train_x, train_y, val_x, val_y
+
\ No newline at end of file
diff --git a/examples/cnn_ms/model/alexnet.py b/examples/cnn_ms/model/alexnet.py
new file mode 100644
index 0000000..85209f6
--- /dev/null
+++ b/examples/cnn_ms/model/alexnet.py
@@ -0,0 +1,118 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from singa import layer
+from singa import model
+
+
+class AlexNet(model.Model):
+
+ def __init__(self, num_classes=10, num_channels=1):
+ super(AlexNet, self).__init__()
+ self.num_classes = num_classes
+ self.input_size = 224
+ self.dimension = 4
+ self.conv1 = layer.Conv2d(num_channels, 64, 11, stride=4, padding=2)
+ self.conv2 = layer.Conv2d(64, 192, 5, padding=2)
+ self.conv3 = layer.Conv2d(192, 384, 3, padding=1)
+ self.conv4 = layer.Conv2d(384, 256, 3, padding=1)
+ self.conv5 = layer.Conv2d(256, 256, 3, padding=1)
+ self.linear1 = layer.Linear(4096)
+ self.linear2 = layer.Linear(4096)
+ self.linear3 = layer.Linear(num_classes)
+ self.pooling1 = layer.MaxPool2d(2, 2, padding=0)
+ self.pooling2 = layer.MaxPool2d(2, 2, padding=0)
+ self.pooling3 = layer.MaxPool2d(2, 2, padding=0)
+ self.avg_pooling1 = layer.AvgPool2d(3, 2, padding=0)
+ self.relu1 = layer.ReLU()
+ self.relu2 = layer.ReLU()
+ self.relu3 = layer.ReLU()
+ self.relu4 = layer.ReLU()
+ self.relu5 = layer.ReLU()
+ self.relu6 = layer.ReLU()
+ self.relu7 = layer.ReLU()
+ self.flatten = layer.Flatten()
+ self.dropout1 = layer.Dropout()
+ self.dropout2 = layer.Dropout()
+ self.softmax_cross_entropy = layer.SoftMaxCrossEntropy()
+
+ def forward(self, x):
+ y = self.conv1(x)
+ y = self.relu1(y)
+ y = self.pooling1(y)
+ y = self.conv2(y)
+ y = self.relu2(y)
+ y = self.pooling2(y)
+ y = self.conv3(y)
+ y = self.relu3(y)
+ y = self.conv4(y)
+ y = self.relu4(y)
+ y = self.conv5(y)
+ y = self.relu5(y)
+ y = self.pooling3(y)
+ y = self.avg_pooling1(y)
+ y = self.flatten(y)
+ y = self.dropout1(y)
+ y = self.linear1(y)
+ y = self.relu6(y)
+ y = self.dropout2(y)
+ y = self.linear2(y)
+ y = self.relu7(y)
+ y = self.linear3(y)
+ return y
+
+ def train_one_batch(self, x, y, dist_option, spars):
+ out = self.forward(x)
+ loss = self.softmax_cross_entropy(out, y)
+
+ if dist_option == 'plain':
+ self.optimizer(loss)
+ elif dist_option == 'half':
+ self.optimizer.backward_and_update_half(loss)
+ elif dist_option == 'partialUpdate':
+ self.optimizer.backward_and_partial_update(loss)
+ elif dist_option == 'sparseTopK':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=True,
+ spars=spars)
+ elif dist_option == 'sparseThreshold':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=False,
+ spars=spars)
+ return out, loss
+
+ def set_optimizer(self, optimizer):
+ self.optimizer = optimizer
+
+
+def create_model(pretrained=False, **kwargs):
+ """Constructs a AlexNet model.
+ Args:
+ pretrained (bool): If True, returns a pre-trained model.
+
+ Returns:
+ The created AlexNet model.
+
+ """
+ model = AlexNet(**kwargs)
+
+ return model
+
+
+__all__ = ['AlexNet', 'create_model']
\ No newline at end of file
diff --git a/examples/cnn_ms/model/cnn.py b/examples/cnn_ms/model/cnn.py
new file mode 100644
index 0000000..b5829d8
--- /dev/null
+++ b/examples/cnn_ms/model/cnn.py
@@ -0,0 +1,88 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from singa import layer
+from singa import model
+
+
+class CNN(model.Model):
+
+ def __init__(self, num_classes=10, num_channels=1):
+ super(CNN, self).__init__()
+ self.num_classes = num_classes
+ self.input_size = 28
+ self.dimension = 4
+ self.conv1 = layer.Conv2d(num_channels, 20, 5, padding=0, activation="RELU")
+ self.conv2 = layer.Conv2d(20, 50, 5, padding=0, activation="RELU")
+ self.linear1 = layer.Linear(500)
+ self.linear2 = layer.Linear(num_classes)
+ self.pooling1 = layer.MaxPool2d(2, 2, padding=0)
+ self.pooling2 = layer.MaxPool2d(2, 2, padding=0)
+ self.relu = layer.ReLU()
+ self.flatten = layer.Flatten()
+ self.softmax_cross_entropy = layer.SoftMaxCrossEntropy()
+
+ def forward(self, x):
+ y = self.conv1(x)
+ y = self.pooling1(y)
+ y = self.conv2(y)
+ y = self.pooling2(y)
+ y = self.flatten(y)
+ y = self.linear1(y)
+ y = self.relu(y)
+ y = self.linear2(y)
+ return y
+
+ def train_one_batch(self, x, y, dist_option, spars):
+ out = self.forward(x)
+ loss = self.softmax_cross_entropy(out, y)
+
+ if dist_option == 'plain':
+ self.optimizer(loss)
+ elif dist_option == 'half':
+ self.optimizer.backward_and_update_half(loss)
+ elif dist_option == 'partialUpdate':
+ self.optimizer.backward_and_partial_update(loss)
+ elif dist_option == 'sparseTopK':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=True,
+ spars=spars)
+ elif dist_option == 'sparseThreshold':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=False,
+ spars=spars)
+ return out, loss
+
+ def set_optimizer(self, optimizer):
+ self.optimizer = optimizer
+
+
+def create_model(pretrained=False, **kwargs):
+ """Constructs a CNN model.
+ Args:
+ pretrained (bool): If True, returns a pre-trained model.
+ Returns:
+ The created CNN model.
+ """
+ model = CNN(**kwargs)
+
+ return model
+
+
+__all__ = ['CNN', 'create_model']
\ No newline at end of file
diff --git a/examples/cnn_ms/model/resnet.py b/examples/cnn_ms/model/resnet.py
new file mode 100644
index 0000000..26900c8
--- /dev/null
+++ b/examples/cnn_ms/model/resnet.py
@@ -0,0 +1,291 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# the code is modified from
+# https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py
+
+from singa import layer
+from singa import model
+
+
+def conv3x3(in_planes, out_planes, stride=1):
+ """3x3 convolution with padding"""
+ return layer.Conv2d(
+ in_planes,
+ out_planes,
+ 3,
+ stride=stride,
+ padding=1,
+ bias=False,
+ )
+
+
+class BasicBlock(layer.Layer):
+ expansion = 1
+
+ def __init__(self, inplanes, planes, stride=1, downsample=None):
+ super(BasicBlock, self).__init__()
+ self.conv1 = conv3x3(inplanes, planes, stride)
+ self.bn1 = layer.BatchNorm2d(planes)
+ self.conv2 = conv3x3(planes, planes)
+ self.bn2 = layer.BatchNorm2d(planes)
+ self.relu1 = layer.ReLU()
+ self.add = layer.Add()
+ self.relu2 = layer.ReLU()
+ self.downsample = downsample
+ self.stride = stride
+
+ def forward(self, x):
+ residual = x
+
+ out = self.conv1(x)
+ out = self.bn1(out)
+ out = self.relu1(out)
+
+ out = self.conv2(out)
+ out = self.bn2(out)
+
+ if self.downsample is not None:
+ residual = self.downsample(x)
+
+ out = self.add(out, residual)
+ out = self.relu2(out)
+
+ return out
+
+
+class Bottleneck(layer.Layer):
+ expansion = 4
+
+ def __init__(self, inplanes, planes, stride=1, downsample=None):
+ super(Bottleneck, self).__init__()
+ self.conv1 = layer.Conv2d(inplanes, planes, 1, bias=False)
+ self.bn1 = layer.BatchNorm2d(planes)
+ self.relu1 = layer.ReLU()
+ self.conv2 = layer.Conv2d(planes,
+ planes,
+ 3,
+ stride=stride,
+ padding=1,
+ bias=False)
+ self.bn2 = layer.BatchNorm2d(planes)
+ self.relu2 = layer.ReLU()
+ self.conv3 = layer.Conv2d(planes,
+ planes * self.expansion,
+ 1,
+ bias=False)
+ self.bn3 = layer.BatchNorm2d(planes * self.expansion)
+
+ self.add = layer.Add()
+ self.relu3 = layer.ReLU()
+
+ self.downsample = downsample
+ self.stride = stride
+
+ def forward(self, x):
+ residual = x
+
+ out = self.conv1(x)
+ out = self.bn1(out)
+ out = self.relu1(out)
+
+ out = self.conv2(out)
+ out = self.bn2(out)
+ out = self.relu2(out)
+
+ out = self.conv3(out)
+ out = self.bn3(out)
+
+ if self.downsample is not None:
+ residual = self.downsample(x)
+
+ out = self.add(out, residual)
+ out = self.relu3(out)
+
+ return out
+
+
+__all__ = [
+ 'ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152'
+]
+
+
+class ResNet(model.Model):
+
+ def __init__(self, block, layers, num_classes=10, num_channels=3):
+ self.inplanes = 64
+ super(ResNet, self).__init__()
+ self.num_classes = num_classes
+ self.input_size = 224
+ self.dimension = 4
+ self.conv1 = layer.Conv2d(num_channels,
+ 64,
+ 7,
+ stride=2,
+ padding=3,
+ bias=False)
+ self.bn1 = layer.BatchNorm2d(64)
+ self.relu = layer.ReLU()
+ self.maxpool = layer.MaxPool2d(kernel_size=3, stride=2, padding=1)
+ self.layer1, layers1 = self._make_layer(block, 64, layers[0])
+ self.layer2, layers2 = self._make_layer(block, 128, layers[1], stride=2)
+ self.layer3, layers3 = self._make_layer(block, 256, layers[2], stride=2)
+ self.layer4, layers4 = self._make_layer(block, 512, layers[3], stride=2)
+ self.avgpool = layer.AvgPool2d(7, stride=1)
+ self.flatten = layer.Flatten()
+ self.fc = layer.Linear(num_classes)
+ self.softmax_cross_entropy = layer.SoftMaxCrossEntropy()
+
+ self.register_layers(*layers1, *layers2, *layers3, *layers4)
+
+ def _make_layer(self, block, planes, blocks, stride=1):
+ downsample = None
+ if stride != 1 or self.inplanes != planes * block.expansion:
+ conv = layer.Conv2d(
+ self.inplanes,
+ planes * block.expansion,
+ 1,
+ stride=stride,
+ bias=False,
+ )
+ bn = layer.BatchNorm2d(planes * block.expansion)
+
+ def _downsample(x):
+ return bn(conv(x))
+
+ downsample = _downsample
+
+ layers = []
+ layers.append(block(self.inplanes, planes, stride, downsample))
+ self.inplanes = planes * block.expansion
+ for i in range(1, blocks):
+ layers.append(block(self.inplanes, planes))
+
+ def forward(x):
+ for layer in layers:
+ x = layer(x)
+ return x
+
+ return forward, layers
+
+ def forward(self, x):
+ x = self.conv1(x)
+ x = self.bn1(x)
+ x = self.relu(x)
+ x = self.maxpool(x)
+
+ x = self.layer1(x)
+ x = self.layer2(x)
+ x = self.layer3(x)
+ x = self.layer4(x)
+
+ x = self.avgpool(x)
+ x = self.flatten(x)
+ x = self.fc(x)
+
+ return x
+
+ def train_one_batch(self, x, y, dist_option, spars):
+ out = self.forward(x)
+ loss = self.softmax_cross_entropy(out, y)
+
+ if dist_option == 'plain':
+ self.optimizer(loss)
+ elif dist_option == 'half':
+ self.optimizer.backward_and_update_half(loss)
+ elif dist_option == 'partialUpdate':
+ self.optimizer.backward_and_partial_update(loss)
+ elif dist_option == 'sparseTopK':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=True,
+ spars=spars)
+ elif dist_option == 'sparseThreshold':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=False,
+ spars=spars)
+ return out, loss
+
+ def set_optimizer(self, optimizer):
+ self.optimizer = optimizer
+
+
+def resnet18(pretrained=False, **kwargs):
+ """Constructs a ResNet-18 model.
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet.
+
+ Returns:
+ The created ResNet-18 model.
+ """
+ model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs)
+
+ return model
+
+
+def resnet34(pretrained=False, **kwargs):
+ """Constructs a ResNet-34 model.
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet.
+ Returns:
+ The created ResNet-34 model.
+ """
+ model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs)
+
+ return model
+
+
+def resnet50(pretrained=False, **kwargs):
+ """Constructs a ResNet-50 model.
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet.
+ Returns:
+ The created ResNet-50 model.
+ """
+ model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs)
+
+ return model
+
+
+def resnet101(pretrained=False, **kwargs):
+ """Constructs a ResNet-101 model.
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet.
+ Returns:
+ The created ResNet-101 model.
+ """
+ model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs)
+
+ return model
+
+
+def resnet152(pretrained=False, **kwargs):
+ """Constructs a ResNet-152 model.
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet.
+ Returns:
+ The created ResNet-152 model.
+ """
+ model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs)
+
+ return model
+
+
+__all__ = [
+ 'ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152'
+]
\ No newline at end of file
diff --git a/examples/cnn_ms/model/xceptionnet.py b/examples/cnn_ms/model/xceptionnet.py
new file mode 100644
index 0000000..52e5027
--- /dev/null
+++ b/examples/cnn_ms/model/xceptionnet.py
@@ -0,0 +1,309 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# =============================================================================
+
+# the code is modified from
+# https://github.com/Cadene/pretrained-models.pytorch/blob/master/pretrainedmodels/models/xception.py
+
+from singa import layer
+from singa import model
+
+
+class Block(layer.Layer):
+
+ def __init__(self,
+ in_filters,
+ out_filters,
+ reps,
+ strides=1,
+ padding=0,
+ start_with_relu=True,
+ grow_first=True):
+ super(Block, self).__init__()
+
+ if out_filters != in_filters or strides != 1:
+ self.skip = layer.Conv2d(in_filters,
+ out_filters,
+ 1,
+ stride=strides,
+ padding=padding,
+ bias=False)
+ self.skipbn = layer.BatchNorm2d(out_filters)
+ else:
+ self.skip = None
+
+ self.layers = []
+
+ filters = in_filters
+ if grow_first:
+ self.layers.append(layer.ReLU())
+ self.layers.append(
+ layer.SeparableConv2d(in_filters,
+ out_filters,
+ 3,
+ stride=1,
+ padding=1,
+ bias=False))
+ self.layers.append(layer.BatchNorm2d(out_filters))
+ filters = out_filters
+
+ for i in range(reps - 1):
+ self.layers.append(layer.ReLU())
+ self.layers.append(
+ layer.SeparableConv2d(filters,
+ filters,
+ 3,
+ stride=1,
+ padding=1,
+ bias=False))
+ self.layers.append(layer.BatchNorm2d(filters))
+
+ if not grow_first:
+ self.layers.append(layer.ReLU())
+ self.layers.append(
+ layer.SeparableConv2d(in_filters,
+ out_filters,
+ 3,
+ stride=1,
+ padding=1,
+ bias=False))
+ self.layers.append(layer.BatchNorm2d(out_filters))
+
+ if not start_with_relu:
+ self.layers = self.layers[1:]
+ else:
+ self.layers[0] = layer.ReLU()
+
+ if strides != 1:
+ self.layers.append(layer.MaxPool2d(3, strides, padding + 1))
+
+ self.register_layers(*self.layers)
+
+ self.add = layer.Add()
+
+ def forward(self, x):
+ y = self.layers[0](x)
+ for layer in self.layers[1:]:
+ if isinstance(y, tuple):
+ y = y[0]
+ y = layer(y)
+
+ if self.skip is not None:
+ skip = self.skip(x)
+ skip = self.skipbn(skip)
+ else:
+ skip = x
+ y = self.add(y, skip)
+ return y
+
+
+class Xception(model.Model):
+ """
+ Xception optimized for the ImageNet dataset, as specified in
+ https://arxiv.org/pdf/1610.02357.pdf
+ """
+
+ def __init__(self, num_classes=10, num_channels=3):
+ """ Constructor
+ Args:
+ num_classes: number of classes
+ """
+ super(Xception, self).__init__()
+ self.num_classes = num_classes
+ self.input_size = 299
+ self.dimension = 4
+
+ self.conv1 = layer.Conv2d(num_channels, 32, 3, 2, 0, bias=False)
+ self.bn1 = layer.BatchNorm2d(32)
+ self.relu1 = layer.ReLU()
+
+ self.conv2 = layer.Conv2d(32, 64, 3, 1, 1, bias=False)
+ self.bn2 = layer.BatchNorm2d(64)
+ self.relu2 = layer.ReLU()
+ # do relu here
+
+ self.block1 = Block(64,
+ 128,
+ 2,
+ 2,
+ padding=0,
+ start_with_relu=False,
+ grow_first=True)
+ self.block2 = Block(128,
+ 256,
+ 2,
+ 2,
+ padding=0,
+ start_with_relu=True,
+ grow_first=True)
+ self.block3 = Block(256,
+ 728,
+ 2,
+ 2,
+ padding=0,
+ start_with_relu=True,
+ grow_first=True)
+
+ self.block4 = Block(728,
+ 728,
+ 3,
+ 1,
+ start_with_relu=True,
+ grow_first=True)
+ self.block5 = Block(728,
+ 728,
+ 3,
+ 1,
+ start_with_relu=True,
+ grow_first=True)
+ self.block6 = Block(728,
+ 728,
+ 3,
+ 1,
+ start_with_relu=True,
+ grow_first=True)
+ self.block7 = Block(728,
+ 728,
+ 3,
+ 1,
+ start_with_relu=True,
+ grow_first=True)
+
+ self.block8 = Block(728,
+ 728,
+ 3,
+ 1,
+ start_with_relu=True,
+ grow_first=True)
+ self.block9 = Block(728,
+ 728,
+ 3,
+ 1,
+ start_with_relu=True,
+ grow_first=True)
+ self.block10 = Block(728,
+ 728,
+ 3,
+ 1,
+ start_with_relu=True,
+ grow_first=True)
+ self.block11 = Block(728,
+ 728,
+ 3,
+ 1,
+ start_with_relu=True,
+ grow_first=True)
+
+ self.block12 = Block(728,
+ 1024,
+ 2,
+ 2,
+ start_with_relu=True,
+ grow_first=False)
+
+ self.conv3 = layer.SeparableConv2d(1024, 1536, 3, 1, 1)
+ self.bn3 = layer.BatchNorm2d(1536)
+ self.relu3 = layer.ReLU()
+
+ # do relu here
+ self.conv4 = layer.SeparableConv2d(1536, 2048, 3, 1, 1)
+ self.bn4 = layer.BatchNorm2d(2048)
+
+ self.relu4 = layer.ReLU()
+ self.globalpooling = layer.MaxPool2d(10, 1)
+ self.flatten = layer.Flatten()
+ self.fc = layer.Linear(num_classes)
+
+ self.softmax_cross_entropy = layer.SoftMaxCrossEntropy()
+
+ def features(self, input):
+ x = self.conv1(input)
+ x = self.bn1(x)
+ x = self.relu1(x)
+
+ x = self.conv2(x)
+ x = self.bn2(x)
+ x = self.relu2(x)
+
+ x = self.block1(x)
+ x = self.block2(x)
+ x = self.block3(x)
+ x = self.block4(x)
+ x = self.block5(x)
+ x = self.block6(x)
+ x = self.block7(x)
+ x = self.block8(x)
+ x = self.block9(x)
+ x = self.block10(x)
+ x = self.block11(x)
+ x = self.block12(x)
+
+ x = self.conv3(x)
+ x = self.bn3(x)
+ x = self.relu3(x)
+
+ x = self.conv4(x)
+ x = self.bn4(x)
+ return x
+
+ def logits(self, features):
+ x = self.relu4(features)
+ x = self.globalpooling(x)
+ x = self.flatten(x)
+ x = self.fc(x)
+ return x
+
+ def forward(self, x):
+ x = self.features(x)
+ x = self.logits(x)
+ return x
+
+ def train_one_batch(self, x, y, dist_option, spars):
+ out = self.forward(x)
+ loss = self.softmax_cross_entropy(out, y)
+ if dist_option == 'plain':
+ self.optimizer(loss)
+ elif dist_option == 'half':
+ self.optimizer.backward_and_update_half(loss)
+ elif dist_option == 'partialUpdate':
+ self.optimizer.backward_and_partial_update(loss)
+ elif dist_option == 'sparseTopK':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=True,
+ spars=spars)
+ elif dist_option == 'sparseThreshold':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=False,
+ spars=spars)
+ return out, loss
+
+ def set_optimizer(self, optimizer):
+ self.optimizer = optimizer
+
+
+def create_model(pretrained=False, **kwargs):
+ """Constructs a Xceptionnet model.
+ Args:
+ pretrained (bool): If True, returns a pre-trained model.
+ Returns:
+ The created Xceptionnet model.
+ """
+ model = Xception(**kwargs)
+
+ return model
+
+
+__all__ = ['Xception', 'create_model']
\ No newline at end of file
diff --git a/examples/cnn_ms/msmlp/model.py b/examples/cnn_ms/msmlp/model.py
new file mode 100644
index 0000000..f6e2a2e
--- /dev/null
+++ b/examples/cnn_ms/msmlp/model.py
@@ -0,0 +1,199 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from singa import layer
+from singa import model
+from singa import tensor
+from singa import opt
+from singa import device
+from singa.autograd import Operator
+from singa.layer import Layer
+from singa import singa_wrap as singa
+import argparse
+import numpy as np
+
+np_dtype = {"float16": np.float16, "float32": np.float32}
+
+singa_dtype = {"float16": tensor.float16, "float32": tensor.float32}
+
+#### self-defined loss begin
+
+### from autograd.py
+class SumError(Operator):
+
+ def __init__(self):
+ super(SumError, self).__init__()
+ # self.t = t.data
+
+ def forward(self, x):
+ # self.err = singa.__sub__(x, self.t)
+ self.data_x = x
+ # sqr = singa.Square(self.err)
+ # loss = singa.SumAll(sqr)
+ loss = singa.SumAll(x)
+ # self.n = 1
+ # for s in x.shape():
+ # self.n *= s
+ # loss /= self.n
+ return loss
+
+ def backward(self, dy=1.0):
+ # dx = self.err
+ dev = device.get_default_device()
+ dx = tensor.Tensor(self.data_x.shape, dev, singa_dtype['float32'])
+ dx.copy_from_numpy(np.ones(self.data_x.shape))
+ # dx *= float(2 / self.n)
+ dx *= dy
+ return dx
+
+def se_loss(x):
+ # assert x.shape == t.shape, "input and target shape different: %s, %s" % (
+ # x.shape, t.shape)
+ return SumError()(x)[0]
+
+### from layer.py
+class SumErrorLayer(Layer):
+ """
+ Generate a MeanSquareError operator
+ """
+
+ def __init__(self):
+ super(SumErrorLayer, self).__init__()
+
+ def forward(self, x):
+ return se_loss(x)
+
+#### self-defined loss end
+
+class MSMLP(model.Model):
+
+ def __init__(self, data_size=10, perceptron_size=100, num_classes=10):
+ super(MSMLP, self).__init__()
+ self.num_classes = num_classes
+ self.dimension = 2
+
+ self.relu = layer.ReLU()
+ self.linear1 = layer.Linear(perceptron_size)
+ self.linear2 = layer.Linear(num_classes)
+ self.softmax_cross_entropy = layer.SoftMaxCrossEntropy()
+
+ self.sum_error = SumErrorLayer()
+
+ def forward(self, inputs):
+ y = self.linear1(inputs)
+ y = self.relu(y)
+ y = self.linear2(y)
+ return y
+
+ def train_one_batch(self, x, y, synflow_flag, dist_option, spars):
+ out = self.forward(x)
+ loss = self.softmax_cross_entropy(out, y)
+
+ if dist_option == 'plain':
+ pn_p_g_list = self.optimizer(loss)
+ elif dist_option == 'half':
+ self.optimizer.backward_and_update_half(loss)
+ elif dist_option == 'partialUpdate':
+ self.optimizer.backward_and_partial_update(loss)
+ elif dist_option == 'sparseTopK':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=True,
+ spars=spars)
+ elif dist_option == 'sparseThreshold':
+ self.optimizer.backward_and_sparse_update(loss,
+ topK=False,
+ spars=spars)
+ return pn_p_g_list, out, loss
+
+ def set_optimizer(self, optimizer):
+ self.optimizer = optimizer
+
+
+def create_model(pretrained=False, **kwargs):
+ """Constructs a CNN model.
+ Args:
+ pretrained (bool): If True, returns a pre-trained model.
+
+ Returns:
+ The created CNN model.
+ """
+ model = MSMLP(**kwargs)
+
+ return model
+
+
+__all__ = ['MLP', 'create_model']
+
+if __name__ == "__main__":
+ np.random.seed(0)
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-p',
+ choices=['float32', 'float16'],
+ default='float32',
+ dest='precision')
+ parser.add_argument('-g',
+ '--disable-graph',
+ default='True',
+ action='store_false',
+ help='disable graph',
+ dest='graph')
+ parser.add_argument('-m',
+ '--max-epoch',
+ default=1001,
+ type=int,
+ help='maximum epochs',
+ dest='max_epoch')
+ args = parser.parse_args()
+
+ # generate the boundary
+ f = lambda x: (5 * x + 1)
+ bd_x = np.linspace(-1.0, 1, 200)
+ bd_y = f(bd_x)
+
+ # generate the training data
+ x = np.random.uniform(-1, 1, 400)
+ y = f(x) + 2 * np.random.randn(len(x))
+
+ # choose one precision
+ precision = singa_dtype[args.precision]
+ np_precision = np_dtype[args.precision]
+
+ # convert training data to 2d space
+ label = np.asarray([5 * a + 1 > b for (a, b) in zip(x, y)]).astype(np.int32)
+ data = np.array([[a, b] for (a, b) in zip(x, y)], dtype=np_precision)
+
+ dev = device.create_cuda_gpu_on(0)
+ sgd = opt.SGD(0.1, 0.9, 1e-5, dtype=singa_dtype[args.precision])
+ tx = tensor.Tensor((400, 2), dev, precision)
+ ty = tensor.Tensor((400,), dev, tensor.int32)
+ model = MLP(data_size=2, perceptron_size=3, num_classes=2)
+
+ # attach model to graph
+ model.set_optimizer(sgd)
+ model.compile([tx], is_train=True, use_graph=args.graph, sequential=True)
+ model.train()
+
+ for i in range(args.max_epoch):
+ tx.copy_from_numpy(data)
+ ty.copy_from_numpy(label)
+ out, loss = model(tx, ty, 'fp32', spars=None)
+
+ if i % 100 == 0:
+ print("training loss = ", tensor.to_numpy(loss)[0])
diff --git a/examples/cnn_ms/msmlp/native.py b/examples/cnn_ms/msmlp/native.py
new file mode 100644
index 0000000..359d5cd
--- /dev/null
+++ b/examples/cnn_ms/msmlp/native.py
@@ -0,0 +1,135 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from singa import tensor
+from singa.tensor import Tensor
+from singa import autograd
+from singa import opt
+import numpy as np
+from singa import device
+import argparse
+
+np_dtype = {"float16": np.float16, "float32": np.float32}
+
+singa_dtype = {"float16": tensor.float16, "float32": tensor.float32}
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-p',
+ choices=['float32', 'float16'],
+ default='float32',
+ dest='precision')
+ parser.add_argument('-m',
+ '--max-epoch',
+ default=1001,
+ type=int,
+ help='maximum epochs',
+ dest='max_epoch')
+ args = parser.parse_args()
+
+ np.random.seed(0)
+
+ autograd.training = True
+
+ # prepare training data in numpy array
+
+ # generate the boundary
+ f = lambda x: (5 * x + 1)
+ bd_x = np.linspace(-1.0, 1, 200)
+ bd_y = f(bd_x)
+
+ # generate the training data
+ x = np.random.uniform(-1, 1, 400)
+ y = f(x) + 2 * np.random.randn(len(x))
+
+ # convert training data to 2d space
+ label = np.asarray([5 * a + 1 > b for (a, b) in zip(x, y)])
+ data = np.array([[a, b] for (a, b) in zip(x, y)], dtype=np.float32)
+
+ def to_categorical(y, num_classes):
+ """
+ Converts a class vector (integers) to binary class matrix.
+ Args:
+ y: class vector to be converted into a matrix
+ (integers from 0 to num_classes).
+ num_classes: total number of classes.
+ Returns:
+ A binary matrix representation of the input.
+ """
+ y = np.array(y, dtype="int")
+ n = y.shape[0]
+ categorical = np.zeros((n, num_classes))
+ categorical[np.arange(n), y] = 1
+ return categorical
+
+ label = to_categorical(label, 2).astype(np.float32)
+ print("train_data_shape:", data.shape)
+ print("train_label_shape:", label.shape)
+
+ precision = singa_dtype[args.precision]
+ np_precision = np_dtype[args.precision]
+
+ dev = device.create_cuda_gpu()
+
+ inputs = Tensor(data=data, device=dev)
+ target = Tensor(data=label, device=dev)
+
+ inputs = inputs.as_type(precision)
+ target = target.as_type(tensor.int32)
+
+ w0_np = np.random.normal(0, 0.1, (2, 3)).astype(np_precision)
+ w0 = Tensor(data=w0_np,
+ device=dev,
+ dtype=precision,
+ requires_grad=True,
+ stores_grad=True)
+ b0 = Tensor(shape=(3,),
+ device=dev,
+ dtype=precision,
+ requires_grad=True,
+ stores_grad=True)
+ b0.set_value(0.0)
+
+ w1_np = np.random.normal(0, 0.1, (3, 2)).astype(np_precision)
+ w1 = Tensor(data=w1_np,
+ device=dev,
+ dtype=precision,
+ requires_grad=True,
+ stores_grad=True)
+ b1 = Tensor(shape=(2,),
+ device=dev,
+ dtype=precision,
+ requires_grad=True,
+ stores_grad=True)
+ b1.set_value(0.0)
+
+ sgd = opt.SGD(0.05, 0.8)
+
+ # training process
+ for i in range(args.max_epoch):
+ x = autograd.matmul(inputs, w0)
+ x = autograd.add_bias(x, b0)
+ x = autograd.relu(x)
+ x = autograd.matmul(x, w1)
+ x = autograd.add_bias(x, b1)
+ loss = autograd.softmax_cross_entropy(x, target)
+ sgd(loss)
+
+ if i % 100 == 0:
+ print("%d, training loss = " % i, tensor.to_numpy(loss)[0])
\ No newline at end of file
diff --git a/examples/trans/README.md b/examples/trans/README.md
new file mode 100644
index 0000000..43066fa
--- /dev/null
+++ b/examples/trans/README.md
@@ -0,0 +1,52 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+# Machine translation model using Transformer Example
+This example trains a Transformer model on a machine translation task. By default, the training script uses the anki dataset, provided.
+You can download from http://www.manythings.org/anki/. This example uses the Chinese and English sentence pairs provided by this dataset
+to complete the translation task. The dataset contains 29909 sentence pairs in both English and Chinese.
+
+Data format: English + TAB + Chinese + TAB + Attribution.
+
+Example:
+```
+Hi. 嗨。 CC-BY 2.0 (France) Attribution: tatoeba.org #538123 (CM) & #891077 (Martha)
+Hi. 你好。 CC-BY 2.0 (France) Attribution: tatoeba.org #538123 (CM) & #4857568 (musclegirlxyp)
+```
+
+The train.py script accepts the following arguments:
+```
+optional arguments:
+ [arg] [type] [desc] [default]
+ --dataset string location of the dataset
+ --max-epoch int maximum epochs default 100
+ --batch_size int batch size default 64
+ --shuffle bool shuffle the dataset default True
+ --lr float learning rate default 0.005
+ --seed int random seed default 0
+ --d_model int transformer model d_model default 512
+ --n_head int transformer model n_head default 8
+ --dim_feedforward int transformer model dim_feedforward default 2048
+ --n_layers int transformer model n_layers default 6
+```
+
+run the example
+```
+python train.py --dataset cmn-2000.txt --max-epoch 100 --batch-size 32 --lr 0.01
+```
diff --git a/examples/trans/cmn-eng/cmn-2000.txt b/examples/trans/cmn-eng/cmn-2000.txt
new file mode 100644
index 0000000..9ec7af7
--- /dev/null
+++ b/examples/trans/cmn-eng/cmn-2000.txt
@@ -0,0 +1,2000 @@
+Hi. 嗨。 CC-BY 2.0 (France) Attribution: tatoeba.org #538123 (CM) & #891077 (Martha)
+Hi. 你好。 CC-BY 2.0 (France) Attribution: tatoeba.org #538123 (CM) & #4857568 (musclegirlxyp)
+Run. 你用跑的。 CC-BY 2.0 (France) Attribution: tatoeba.org #4008918 (JSakuragi) & #3748344 (egg0073)
+Stop! 住手! CC-BY 2.0 (France) Attribution: tatoeba.org #448320 (CM) & #448321 (GlossaMatik)
+Wait! 等等! CC-BY 2.0 (France) Attribution: tatoeba.org #1744314 (belgavox) & #4970122 (wzhd)
+Wait! 等一下! CC-BY 2.0 (France) Attribution: tatoeba.org #1744314 (belgavox) & #5092613 (mirrorvan)
+Begin. 开始! CC-BY 2.0 (France) Attribution: tatoeba.org #6102432 (mailohilohi) & #5094852 (Jin_Dehong)
+Hello! 你好。 CC-BY 2.0 (France) Attribution: tatoeba.org #373330 (CK) & #4857568 (musclegirlxyp)
+I try. 我试试。 CC-BY 2.0 (France) Attribution: tatoeba.org #20776 (CK) & #8870261 (will66)
+I won! 我赢了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005192 (CK) & #5102367 (mirrorvan)
+Oh no! 不会吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1299275 (CK) & #5092475 (mirrorvan)
+Cheers! 乾杯! CC-BY 2.0 (France) Attribution: tatoeba.org #487006 (human600) & #765577 (Martha)
+Got it? 知道了没有? CC-BY 2.0 (France) Attribution: tatoeba.org #455353 (CM) & #455357 (GlossaMatik)
+Got it? 懂了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #455353 (CM) & #2032276 (ydcok)
+Got it? 你懂了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #455353 (CM) & #7768205 (jiangche)
+He ran. 他跑了。 CC-BY 2.0 (France) Attribution: tatoeba.org #672229 (CK) & #5092389 (mirrorvan)
+Hop in. 跳进来。 CC-BY 2.0 (France) Attribution: tatoeba.org #1111548 (Scott) & #5092444 (mirrorvan)
+I know. 我知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #319990 (CK) & #3378015 (GlossaMatik)
+I quit. 我退出。 CC-BY 2.0 (France) Attribution: tatoeba.org #731636 (Eldad) & #5102253 (mirrorvan)
+I quit. 我不干了。 CC-BY 2.0 (France) Attribution: tatoeba.org #731636 (Eldad) & #9569182 (MiracleQ)
+I'm OK. 我沒事。 CC-BY 2.0 (France) Attribution: tatoeba.org #433763 (CK) & #819304 (Martha)
+I'm up. 我已经起来了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2765357 (arnxy20) & #8727845 (crescat)
+Listen. 听着。 CC-BY 2.0 (France) Attribution: tatoeba.org #1913088 (CK) & #5092137 (mirrorvan)
+No way! 不可能! CC-BY 2.0 (France) Attribution: tatoeba.org #2175 (CM) & #503298 (fucongcong)
+No way! 没门! CC-BY 2.0 (France) Attribution: tatoeba.org #2175 (CM) & #2052721 (sadhen)
+Really? 真的? CC-BY 2.0 (France) Attribution: tatoeba.org #373216 (kotobaboke) & #1397360 (mtdot)
+Really? 你确定? CC-BY 2.0 (France) Attribution: tatoeba.org #373216 (kotobaboke) & #4208543 (Ethan_lin)
+Thanks! 谢谢! CC-BY 2.0 (France) Attribution: tatoeba.org #448645 (CK) & #4878949 (musclegirlxyp)
+Try it. 试试吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #4756252 (cairnhead) & #4757237 (ryanwoo)
+We try. 我们来试试。 CC-BY 2.0 (France) Attribution: tatoeba.org #247763 (CK) & #5102171 (mirrorvan)
+Why me? 为什么是我? CC-BY 2.0 (France) Attribution: tatoeba.org #24958 (CK) & #796834 (fucongcong)
+Ask Tom. 去问汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954263 (CK) & #2017428 (sadhen)
+Awesome! 好棒! CC-BY 2.0 (France) Attribution: tatoeba.org #433512 (CK) & #4970070 (wzhd)
+Be calm. 冷静点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916317 (CK) & #5092667 (mirrorvan)
+Be fair. 公平点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916316 (CK) & #5092666 (mirrorvan)
+Be kind. 友善点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916315 (CK) & #5092663 (mirrorvan)
+Be kind. 友好點。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916315 (CK) & #5571916 (verdastelo9604)
+Be nice. 和气点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916314 (CK) & #5092659 (mirrorvan)
+Be nice. 友善点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916314 (CK) & #5092663 (mirrorvan)
+Call me. 联系我。 CC-BY 2.0 (France) Attribution: tatoeba.org #1553532 (CK) & #5102283 (mirrorvan)
+Call us. 联系我们。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916313 (CK) & #5092654 (mirrorvan)
+Come in. 进来。 CC-BY 2.0 (France) Attribution: tatoeba.org #348091 (Hertz) & #5102310 (mirrorvan)
+Get Tom. 找到汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972633 (CK) & #5092681 (mirrorvan)
+Get out! 滾出去! CC-BY 2.0 (France) Attribution: tatoeba.org #266790 (CK) & #819288 (Martha)
+Get out! 出去! CC-BY 2.0 (France) Attribution: tatoeba.org #266790 (CK) & #7768017 (jiangche)
+Go away! 走開! CC-BY 2.0 (France) Attribution: tatoeba.org #433518 (CK) & #819289 (Martha)
+Go away! 滾! CC-BY 2.0 (France) Attribution: tatoeba.org #433518 (CK) & #884704 (Tajfun)
+Go away. 走開! CC-BY 2.0 (France) Attribution: tatoeba.org #433491 (CK) & #819289 (Martha)
+Go home. 回家。 CC-BY 2.0 (France) Attribution: tatoeba.org #2230769 (CK) & #3212768 (GlossaMatik)
+Go home. 回家吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2230769 (CK) & #5102214 (mirrorvan)
+Goodbye! 再见! CC-BY 2.0 (France) Attribution: tatoeba.org #516745 (minshirui) & #336477 (fucongcong)
+Goodbye! 告辞! CC-BY 2.0 (France) Attribution: tatoeba.org #516745 (minshirui) & #4887737 (musclegirlxyp)
+Hang on! 坚持。 CC-BY 2.0 (France) Attribution: tatoeba.org #1894404 (Spamster) & #5092492 (mirrorvan)
+Hang on! 等一下! CC-BY 2.0 (France) Attribution: tatoeba.org #1894404 (Spamster) & #5092613 (mirrorvan)
+Hang on. 坚持。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972640 (CK) & #5092492 (mirrorvan)
+He came. 他来了。 CC-BY 2.0 (France) Attribution: tatoeba.org #853153 (piksea) & #437438 (fucongcong)
+He runs. 他跑。 CC-BY 2.0 (France) Attribution: tatoeba.org #672254 (CK) & #5092396 (mirrorvan)
+Help me. 帮我一下。 CC-BY 2.0 (France) Attribution: tatoeba.org #266065 (Zifre) & #332800 (fucongcong)
+Help us. 帮帮我们吧! CC-BY 2.0 (France) Attribution: tatoeba.org #2187193 (CK) & #7771852 (jiangche)
+Hit Tom. 去打汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203859 (CK) & #8696225 (crescat)
+Hold on. 坚持。 CC-BY 2.0 (France) Attribution: tatoeba.org #1357000 (sacredceltic) & #5092492 (mirrorvan)
+Hug Tom. 抱抱汤姆! CC-BY 2.0 (France) Attribution: tatoeba.org #2203860 (CK) & #4759957 (ryanwoo)
+Hug Tom. 请抱紧汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203860 (CK) & #5096784 (mirrorvan)
+I agree. 我同意。 CC-BY 2.0 (France) Attribution: tatoeba.org #436281 (lukaszpp) & #333224 (fucongcong)
+I'm hot. 我觉得很热。 CC-BY 2.0 (France) Attribution: tatoeba.org #455953 (lukaszpp) & #489080 (GlossaMatik)
+I'm ill. 我生病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #448236 (CK) & #780291 (Martha)
+I'm sad. 我很难过。 CC-BY 2.0 (France) Attribution: tatoeba.org #317741 (CK) & #333736 (fucongcong)
+I'm shy. 我很害羞。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203346 (CK) & #6535146 (xjjAstrus)
+I'm wet. 我濕了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1780075 (Spamster) & #8388737 (wangchou)
+It's OK. 没关系。 CC-BY 2.0 (France) Attribution: tatoeba.org #413756 (CK) & #333730 (fucongcong)
+It's me. 是我。 CC-BY 2.0 (France) Attribution: tatoeba.org #42400 (sysko) & #335161 (fucongcong)
+Join us. 来加入我们吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1745546 (belgavox) & #5092554 (mirrorvan)
+Keep it. 留着吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1913087 (CK) & #5092637 (mirrorvan)
+Kiss me. 吻我。 CC-BY 2.0 (France) Attribution: tatoeba.org #565931 (Fish) & #5092385 (mirrorvan)
+Perfect! 完美! CC-BY 2.0 (France) Attribution: tatoeba.org #374568 (blay_paul) & #5092133 (mirrorvan)
+See you. 再见! CC-BY 2.0 (France) Attribution: tatoeba.org #1151432 (Roggy) & #336477 (fucongcong)
+Shut up! 閉嘴! CC-BY 2.0 (France) Attribution: tatoeba.org #462430 (lukaszpp) & #3718928 (egg0073)
+Skip it. 不管它。 CC-BY 2.0 (France) Attribution: tatoeba.org #1953076 (ozzie) & #5102320 (mirrorvan)
+Take it. 拿走吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1913089 (CK) & #5092645 (mirrorvan)
+Tell me. 告诉我! CC-BY 2.0 (France) Attribution: tatoeba.org #1913090 (CK) & #9965594 (GlossaMatik)
+Tom won. 汤姆胜利了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005191 (CK) & #4956754 (musclegirlxyp)
+Wake up! 醒醒! CC-BY 2.0 (France) Attribution: tatoeba.org #323780 (CK) & #5102191 (mirrorvan)
+Wash up. 去清洗一下。 CC-BY 2.0 (France) Attribution: tatoeba.org #20763 (CK) & #5092178 (mirrorvan)
+We know. 我们知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #1556167 (shanghainese) & #5102291 (mirrorvan)
+Welcome. 欢迎。 CC-BY 2.0 (France) Attribution: tatoeba.org #138919 (CM) & #343770 (fucongcong)
+Who won? 谁赢了? CC-BY 2.0 (France) Attribution: tatoeba.org #2005190 (CK) & #5102365 (mirrorvan)
+Why not? 为什么不? CC-BY 2.0 (France) Attribution: tatoeba.org #30545 (CK) & #796839 (fucongcong)
+You run. 你跑。 CC-BY 2.0 (France) Attribution: tatoeba.org #672252 (CK) & #5092393 (mirrorvan)
+You win. 算你狠。 CC-BY 2.0 (France) Attribution: tatoeba.org #8645635 (hamsolo474) & #2485289 (fenfang557)
+Back off! 往后退点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954264 (CK) & #5102285 (mirrorvan)
+Back off! 后退! CC-BY 2.0 (France) Attribution: tatoeba.org #1954264 (CK) & #10981524 (Elaineeeeee)
+Back off. 往后退点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1553533 (CK) & #5102285 (mirrorvan)
+Be still. 静静的,别动。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954265 (CK) & #5102329 (mirrorvan)
+Beats me. 我一无所知。 CC-BY 2.0 (France) Attribution: tatoeba.org #320001 (blay_paul) & #7772071 (jiangche)
+Cuff him. 把他铐上。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954267 (CK) & #5102333 (mirrorvan)
+Drive on. 往前开。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954268 (CK) & #5102335 (mirrorvan)
+Get away! 走開! CC-BY 2.0 (France) Attribution: tatoeba.org #240634 (CM) & #819289 (Martha)
+Get away! 滾! CC-BY 2.0 (France) Attribution: tatoeba.org #240634 (CM) & #884704 (Tajfun)
+Get down! 趴下! CC-BY 2.0 (France) Attribution: tatoeba.org #268087 (CM) & #5102178 (mirrorvan)
+Get lost! 滾! CC-BY 2.0 (France) Attribution: tatoeba.org #623565 (Dorenda) & #884704 (Tajfun)
+Get lost! 滚。 CC-BY 2.0 (France) Attribution: tatoeba.org #623565 (Dorenda) & #8696338 (crescat)
+Get lost. 滚。 CC-BY 2.0 (France) Attribution: tatoeba.org #854500 (CK) & #8696338 (crescat)
+Get real. 醒醒吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1324400 (Scott) & #5092481 (mirrorvan)
+Good job! 做得好! CC-BY 2.0 (France) Attribution: tatoeba.org #1021038 (Quazel) & #4261676 (egg0073)
+Good job! 干的好! CC-BY 2.0 (France) Attribution: tatoeba.org #1021038 (Quazel) & #7767580 (jiangche)
+Grab Tom. 抓住汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972639 (CK) & #5092688 (mirrorvan)
+Grab him. 抓住他。 CC-BY 2.0 (France) Attribution: tatoeba.org #285184 (CK) & #5092265 (mirrorvan)
+Have fun. 玩得開心。 CC-BY 2.0 (France) Attribution: tatoeba.org #21267 (CK) & #819292 (Martha)
+He tries. 他来试试。 CC-BY 2.0 (France) Attribution: tatoeba.org #288166 (CM) & #5092267 (mirrorvan)
+How cute! 多可爱啊! CC-BY 2.0 (France) Attribution: tatoeba.org #36097 (CM) & #5092632 (mirrorvan)
+Humor me. 你就随了我的意吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954271 (CM) & #5102344 (mirrorvan)
+Hurry up. 趕快! CC-BY 2.0 (France) Attribution: tatoeba.org #1329 (brauliobezerra) & #46 (fucongcong)
+Hurry up. 快点! CC-BY 2.0 (France) Attribution: tatoeba.org #1329 (brauliobezerra) & #512039 (fucongcong)
+Hurry up. 快点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1329 (brauliobezerra) & #5092239 (mirrorvan)
+I did it. 我做到了! CC-BY 2.0 (France) Attribution: tatoeba.org #2549832 (CK) & #8709238 (crescat)
+I forgot. 我忘了。 CC-BY 2.0 (France) Attribution: tatoeba.org #436603 (lukaszpp) & #335875 (fucongcong)
+I resign. 我放弃。 CC-BY 2.0 (France) Attribution: tatoeba.org #731590 (Eldad) & #5102250 (mirrorvan)
+I'll pay. 我來付錢。 CC-BY 2.0 (France) Attribution: tatoeba.org #411285 (CK) & #819298 (Martha)
+I'm back. 我回来了! CC-BY 2.0 (France) Attribution: tatoeba.org #564159 (darinmex) & #10153684 (GlossaMatik)
+I'm busy. 我很忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #261721 (CK) & #819333 (Martha)
+I'm cold. 我冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #455947 (lukaszpp) & #471387 (fucongcong)
+I'm cool. 我很酷。 CC-BY 2.0 (France) Attribution: tatoeba.org #2202692 (CK) & #8933590 (crescat)
+I'm fine. 我很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #257272 (Eldad) & #794004 (fucongcong)
+I'm free! 我自由了! CC-BY 2.0 (France) Attribution: tatoeba.org #1888443 (Spamster) & #9956709 (GlossaMatik)
+I'm full. 我吃飽了。 CC-BY 2.0 (France) Attribution: tatoeba.org #433863 (CK) & #819300 (Martha)
+I'm home. 我在家裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111725 (CK) & #919764 (Martha)
+I'm lost. 我迷失了。 CC-BY 2.0 (France) Attribution: tatoeba.org #455833 (lukaszpp) & #5092558 (mirrorvan)
+I'm sick. 我生病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #780304 (vgigregg) & #780291 (Martha)
+I'm sick. 我病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #780304 (vgigregg) & #2757252 (cienias)
+I'm tall. 我个子高。 CC-BY 2.0 (France) Attribution: tatoeba.org #2764439 (CK) & #7772132 (jiangche)
+Leave me. 让我一个人呆会儿。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954273 (CK) & #5102345 (mirrorvan)
+Let's go! 走吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #241077 (CK) & #334277 (fucongcong)
+Let's go! 我們開始吧! CC-BY 2.0 (France) Attribution: tatoeba.org #241077 (CK) & #819358 (Martha)
+Let's go! 我們走吧! CC-BY 2.0 (France) Attribution: tatoeba.org #241077 (CK) & #819359 (Martha)
+Look out! 当心! CC-BY 2.0 (France) Attribution: tatoeba.org #20719 (CK) & #5092162 (mirrorvan)
+Say what? 啥? CC-BY 2.0 (France) Attribution: tatoeba.org #8453907 (shekitten) & #8463674 (gumblex)
+She runs. 她跑。 CC-BY 2.0 (France) Attribution: tatoeba.org #672264 (CM) & #765935 (Martha)
+Sit down. 请坐。 CC-BY 2.0 (France) Attribution: tatoeba.org #1553397 (CK) & #5780574 (verdastelo9604)
+Stand up. 起立。 CC-BY 2.0 (France) Attribution: tatoeba.org #1573801 (donkirkby) & #1746081 (sadhen)
+Terrific! 很棒! CC-BY 2.0 (France) Attribution: tatoeba.org #52022 (Zifre) & #5092136 (mirrorvan)
+They won. 他们赢了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1618734 (CK) & #5092506 (mirrorvan)
+Tom died. 汤姆去世了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005188 (CK) & #5102363 (mirrorvan)
+Tom lied. 汤姆说谎了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005179 (CK) & #5100135 (mirrorvan)
+Tom lost. 汤姆输了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005180 (CK) & #5094682 (musclegirlxyp)
+Tom quit. 汤姆不干了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005183 (CK) & #5102347 (mirrorvan)
+Tom swam. 汤姆游泳了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203845 (CK) & #4977423 (musclegirlxyp)
+Tom swam. Tom游泳。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203845 (CK) & #5529807 (egg0073)
+Trust me. 相信我。 CC-BY 2.0 (France) Attribution: tatoeba.org #954991 (CM) & #5092404 (mirrorvan)
+Try hard. 努力。 CC-BY 2.0 (France) Attribution: tatoeba.org #271901 (Zifre) & #5102184 (mirrorvan)
+Try some. 试试吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916312 (CK) & #4757237 (ryanwoo)
+Try this. 试试这个。 CC-BY 2.0 (France) Attribution: tatoeba.org #1916311 (CK) & #8715853 (crescat)
+Use this. 请用这个。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954278 (CK) & #9490109 (jin1)
+Who died? 谁死了? CC-BY 2.0 (France) Attribution: tatoeba.org #2005187 (CK) & #5102361 (mirrorvan)
+Am I dead? 我死了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #7921513 (maaster) & #9958169 (GlossaMatik)
+Answer me. 回答我。 CC-BY 2.0 (France) Attribution: tatoeba.org #251060 (Eldad) & #784532 (fucongcong)
+Birds fly. 鳥類飛行。 CC-BY 2.0 (France) Attribution: tatoeba.org #278213 (CK) & #819282 (Martha)
+Call home! 打电话回家! CC-BY 2.0 (France) Attribution: tatoeba.org #1730009 (CK) & #5092540 (mirrorvan)
+Calm down. 冷静点。 CC-BY 2.0 (France) Attribution: tatoeba.org #435575 (CK) & #5092667 (mirrorvan)
+Catch him. 抓住他。 CC-BY 2.0 (France) Attribution: tatoeba.org #449029 (CK) & #5092265 (mirrorvan)
+Come home. 回家吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #413767 (Scott) & #5102214 (mirrorvan)
+Cool down. 冷静点。 CC-BY 2.0 (France) Attribution: tatoeba.org #1860739 (CK) & #5092667 (mirrorvan)
+Do it now. 現在就做。 CC-BY 2.0 (France) Attribution: tatoeba.org #435763 (CK) & #771521 (Martha)
+Dogs bark. 狗会叫。 CC-BY 2.0 (France) Attribution: tatoeba.org #1357070 (sacredceltic) & #5092504 (mirrorvan)
+Don't cry. 别哭。 CC-BY 2.0 (France) Attribution: tatoeba.org #953247 (CK) & #4265201 (notabene)
+Excuse me. 对不起。 CC-BY 2.0 (France) Attribution: tatoeba.org #433504 (CK) & #472304 (fucongcong)
+Fantastic! 好棒! CC-BY 2.0 (France) Attribution: tatoeba.org #433511 (CK) & #4970070 (wzhd)
+Fantastic! 很棒! CC-BY 2.0 (France) Attribution: tatoeba.org #433511 (CK) & #5092136 (mirrorvan)
+Feel this. 来感受一下这个。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972624 (CK) & #5092677 (mirrorvan)
+Follow me. 请跟我来。 CC-BY 2.0 (France) Attribution: tatoeba.org #250135 (CK) & #466246 (fucongcong)
+Follow me. 跟我走。 CC-BY 2.0 (France) Attribution: tatoeba.org #250135 (CK) & #10699375 (GlossaMatik)
+Follow us. 请跟着我们。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972627 (CK) & #5092678 (mirrorvan)
+Forget it. 算了。 CC-BY 2.0 (France) Attribution: tatoeba.org #20398 (Eldad) & #400312 (GlossaMatik)
+Good luck. 祝你好运。 CC-BY 2.0 (France) Attribution: tatoeba.org #239431 (sacredceltic) & #812490 (fucongcong)
+Goodnight. 晚安。 CC-BY 2.0 (France) Attribution: tatoeba.org #7822164 (sharris123) & #4463431 (maple)
+Grab that. 抓住那个。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972635 (CK) & #5092684 (mirrorvan)
+Grab this. 抓住这个。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972637 (CK) & #5092685 (mirrorvan)
+Hands off. 别碰! CC-BY 2.0 (France) Attribution: tatoeba.org #268620 (CM) & #8870260 (will66)
+He's a DJ. 他是一个 DJ 。 CC-BY 2.0 (France) Attribution: tatoeba.org #1383444 (CK) & #1878329 (sadhen)
+He's busy. 他很忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #2535641 (CM) & #343715 (fucongcong)
+He's lazy. 他很懒。 CC-BY 2.0 (France) Attribution: tatoeba.org #2030108 (Spamster) & #343917 (fucongcong)
+Hold fire. 停火。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972642 (CK) & #5092693 (mirrorvan)
+How awful! 太可怕了。 CC-BY 2.0 (France) Attribution: tatoeba.org #72077 (CM) & #5102161 (mirrorvan)
+How weird! 真奇怪。 CC-BY 2.0 (France) Attribution: tatoeba.org #4462562 (CK) & #1705791 (sadhen)
+How weird! 多怪啊! CC-BY 2.0 (France) Attribution: tatoeba.org #4462562 (CK) & #5092629 (mirrorvan)
+I am cold. 我冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #436325 (lukaszpp) & #471387 (fucongcong)
+I am full. 我吃飽了。 CC-BY 2.0 (France) Attribution: tatoeba.org #620122 (ulyssemc1) & #819300 (Martha)
+I am okay. 我沒事。 CC-BY 2.0 (France) Attribution: tatoeba.org #376402 (saeb) & #819304 (Martha)
+I am sick. 我生病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #436427 (lukaszpp) & #780291 (Martha)
+I am tall. 我个子高。 CC-BY 2.0 (France) Attribution: tatoeba.org #436275 (lukaszpp) & #7772132 (jiangche)
+I clapped. 我拍手。 CC-BY 2.0 (France) Attribution: tatoeba.org #6196262 (CK) & #920090 (Martha)
+I get you. 我了解你。 CC-BY 2.0 (France) Attribution: tatoeba.org #904789 (Trailsend) & #904787 (kanaorange)
+I give up. 我放弃。 CC-BY 2.0 (France) Attribution: tatoeba.org #241200 (CK) & #5102250 (mirrorvan)
+I hope so. 我希望如此。 CC-BY 2.0 (France) Attribution: tatoeba.org #51142 (CK) & #333103 (fucongcong)
+I laughed. 我笑了。 CC-BY 2.0 (France) Attribution: tatoeba.org #258713 (CK) & #335165 (fucongcong)
+I promise. 我向你保证。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111800 (CK) & #502727 (fucongcong)
+I saw Tom. 我看見湯姆了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2244569 (CK) & #6623201 (verdastelo9604)
+I was shy. 我害羞。 CC-BY 2.0 (France) Attribution: tatoeba.org #4695537 (Hybrid) & #8215726 (verdastelo9604)
+I'll swim. 我要游泳。 CC-BY 2.0 (France) Attribution: tatoeba.org #5576197 (CK) & #6994070 (verdastelo9604)
+I'm a man. 我是个男人。 CC-BY 2.0 (France) Attribution: tatoeba.org #580774 (CM) & #333655 (fucongcong)
+I'm bored. 我覺得很無聊。 CC-BY 2.0 (France) Attribution: tatoeba.org #431539 (Clavain) & #3668663 (egg0073)
+I'm first. 我是第一。 CC-BY 2.0 (France) Attribution: tatoeba.org #2202863 (CK) & #8686688 (crescat)
+I'm lucky. 我运气很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111713 (CK) & #437296 (fucongcong)
+I'm right. 我是對的。 CC-BY 2.0 (France) Attribution: tatoeba.org #321343 (CK) & #816721 (Martha)
+I'm sober. 我很清醒。 CC-BY 2.0 (France) Attribution: tatoeba.org #2361904 (CK) & #9961281 (GlossaMatik)
+I'm sorry. 对不起。 CC-BY 2.0 (France) Attribution: tatoeba.org #38387 (CK) & #472304 (fucongcong)
+I'm sorry. 我很抱歉。 CC-BY 2.0 (France) Attribution: tatoeba.org #38387 (CK) & #824688 (Martha)
+I'm tired. 我很累。 CC-BY 2.0 (France) Attribution: tatoeba.org #1705 (brauliobezerra) & #397734 (GlossaMatik)
+I'm young. 我還年輕。 CC-BY 2.0 (France) Attribution: tatoeba.org #321850 (CK) & #832459 (Martha)
+Ignore it. 不放在眼裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #2649249 (CK) & #5396469 (xjjAstrus)
+Is it far? 遠嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1308427 (CK) & #6559044 (xjjAstrus)
+Is it you? 是你吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1259560 (Scott) & #10696048 (GlossaMatik)
+It rained. 下了雨。 CC-BY 2.0 (France) Attribution: tatoeba.org #1435651 (mattpbooth) & #2481833 (alvations)
+It snowed. 下雪了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1181168 (Eldad) & #780269 (Martha)
+It's 3:30. 3点半了。 CC-BY 2.0 (France) Attribution: tatoeba.org #456175 (lukaszpp) & #795758 (fucongcong)
+It's 7:45. 现在是七点四十五分。 CC-BY 2.0 (France) Attribution: tatoeba.org #2762784 (CK) & #2041218 (Venki)
+It's 7:45. 现在是7点45分。 CC-BY 2.0 (France) Attribution: tatoeba.org #2762784 (CK) & #2041220 (Venki)
+It's cold. 天很冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #1813 (CK) & #334647 (fucongcong)
+It's food. 它是食物。 CC-BY 2.0 (France) Attribution: tatoeba.org #2187210 (CK) & #4887700 (musclegirlxyp)
+It's free. 它是免費的。 CC-BY 2.0 (France) Attribution: tatoeba.org #435782 (CK) & #825127 (Martha)
+It's late. 很晚了。 CC-BY 2.0 (France) Attribution: tatoeba.org #31195 (CK) & #745892 (fucongcong)
+It's true. 這是真的。 CC-BY 2.0 (France) Attribution: tatoeba.org #54868 (CK) & #771357 (Martha)
+Keep them. 留着吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111633 (CK) & #5092637 (mirrorvan)
+Kill them. 殺了他們 CC-BY 2.0 (France) Attribution: tatoeba.org #6049439 (mailohilohi) & #6049579 (magicalrpetz47)
+Let me in. 让我进去。 CC-BY 2.0 (France) Attribution: tatoeba.org #277466 (CK) & #333350 (fucongcong)
+Lie still. 躺着不动。 CC-BY 2.0 (France) Attribution: tatoeba.org #1839430 (CK) & #5092579 (mirrorvan)
+Look back! 回头看! CC-BY 2.0 (France) Attribution: tatoeba.org #240166 (CK) & #5102163 (mirrorvan)
+Move over. 腾一下地方。 CC-BY 2.0 (France) Attribution: tatoeba.org #1553407 (CK) & #5102267 (mirrorvan)
+Of course! 當然! CC-BY 2.0 (France) Attribution: tatoeba.org #433730 (CK) & #771439 (Martha)
+Of course! 当然哪! CC-BY 2.0 (France) Attribution: tatoeba.org #433730 (CK) & #11698263 (Jokubas)
+Of course. 当然是的。 CC-BY 2.0 (France) Attribution: tatoeba.org #433492 (CK) & #421347 (GlossaMatik)
+Of course. 當然。 CC-BY 2.0 (France) Attribution: tatoeba.org #433492 (CK) & #825987 (Martha)
+Of course. 当然了。 CC-BY 2.0 (France) Attribution: tatoeba.org #433492 (CK) & #4970077 (wzhd)
+Open fire! 开火! CC-BY 2.0 (France) Attribution: tatoeba.org #1108002 (Scott) & #5092433 (mirrorvan)
+Read this. 念这个。 CC-BY 2.0 (France) Attribution: tatoeba.org #1098659 (cntrational) & #5092431 (mirrorvan)
+See above. 参见上文。 CC-BY 2.0 (France) Attribution: tatoeba.org #273621 (CM) & #333511 (fucongcong)
+Seriously? 真的? CC-BY 2.0 (France) Attribution: tatoeba.org #1327057 (bmaynard87) & #1397360 (mtdot)
+Seriously? 认真的? CC-BY 2.0 (France) Attribution: tatoeba.org #1327057 (bmaynard87) & #10983988 (Elaineeeeee)
+She cried. 她哭了。 CC-BY 2.0 (France) Attribution: tatoeba.org #313193 (CK) & #5092280 (mirrorvan)
+She tried. 她试过了。 CC-BY 2.0 (France) Attribution: tatoeba.org #309976 (CK) & #5092274 (mirrorvan)
+She walks. 她在行走。 CC-BY 2.0 (France) Attribution: tatoeba.org #316925 (CK) & #5092290 (mirrorvan)
+Sit tight. 耐心等着。 CC-BY 2.0 (France) Attribution: tatoeba.org #40196 (CM) & #5092221 (mirrorvan)
+Slow down. 慢一點。 CC-BY 2.0 (France) Attribution: tatoeba.org #2187252 (CK) & #4754645 (egg0073)
+Stay calm. 保持冷靜。 CC-BY 2.0 (France) Attribution: tatoeba.org #788304 (hrin) & #778870 (Martha)
+Stay down! 趴着! CC-BY 2.0 (France) Attribution: tatoeba.org #1777435 (Spamster) & #5092568 (mirrorvan)
+Stop that! 住手。 CC-BY 2.0 (France) Attribution: tatoeba.org #651592 (orbpic) & #5092387 (mirrorvan)
+Take care! 照顾好自己。 CC-BY 2.0 (France) Attribution: tatoeba.org #324861 (CK) & #510765 (fucongcong)
+Take care. 照顾好自己。 CC-BY 2.0 (France) Attribution: tatoeba.org #20362 (sacredceltic) & #510765 (fucongcong)
+Take care. 保重。 CC-BY 2.0 (France) Attribution: tatoeba.org #20362 (sacredceltic) & #1762971 (sadhen)
+Take mine. 拿我的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111483 (CK) & #9958257 (GlossaMatik)
+Thank you. 谢谢。 CC-BY 2.0 (France) Attribution: tatoeba.org #1876041 (Asma) & #5094881 (musclegirlxyp)
+Then what? 那又怎樣? CC-BY 2.0 (France) Attribution: tatoeba.org #53035 (CM) & #51 (fucongcong)
+They left. 他们离开了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111368 (CK) & #8696255 (crescat)
+Time's up. 时间到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #6611926 (Eccles17) & #5094825 (Jin_Dehong)
+Tom slept. 汤姆睡了。 CC-BY 2.0 (France) Attribution: tatoeba.org #6645778 (CK) & #7768193 (jiangche)
+Tom swims. Tom游泳。 CC-BY 2.0 (France) Attribution: tatoeba.org #5190879 (CK) & #5529807 (egg0073)
+Tom waved. 汤姆挥手了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005185 (CK) & #5102356 (mirrorvan)
+Tom'll go. 湯姆要走。 CC-BY 2.0 (France) Attribution: tatoeba.org #2123528 (CK) & #6939445 (verdastelo9604)
+Try again. 再試一次。 CC-BY 2.0 (France) Attribution: tatoeba.org #31723 (CK) & #824621 (Martha)
+Try again. 再试一下。 CC-BY 2.0 (France) Attribution: tatoeba.org #31723 (CK) & #8496264 (maxine)
+Turn left. 向左转。 CC-BY 2.0 (France) Attribution: tatoeba.org #464284 (lukaszpp) & #465034 (fucongcong)
+Wait here. 在这等着。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841188 (CK) & #5102308 (mirrorvan)
+Watch out! 当心! CC-BY 2.0 (France) Attribution: tatoeba.org #375828 (megamanenm) & #5092162 (mirrorvan)
+Well done! 做得好! CC-BY 2.0 (France) Attribution: tatoeba.org #464478 (lukaszpp) & #4261676 (egg0073)
+Well done! 干的好! CC-BY 2.0 (France) Attribution: tatoeba.org #464478 (lukaszpp) & #7767580 (jiangche)
+Who cares? 爱谁谁。 CC-BY 2.0 (France) Attribution: tatoeba.org #40434 (CK) & #5092226 (mirrorvan)
+Who knows? 谁知道? CC-BY 2.0 (France) Attribution: tatoeba.org #276369 (CK) & #395531 (GlossaMatik)
+Who's Tom? 汤姆是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #1886548 (CK) & #4956713 (musclegirlxyp)
+Who's she? 她是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #2203797 (CK) & #4887707 (musclegirlxyp)
+Wonderful! 很棒! CC-BY 2.0 (France) Attribution: tatoeba.org #433510 (CK) & #5092136 (mirrorvan)
+You idiot! 蠢货! CC-BY 2.0 (France) Attribution: tatoeba.org #418475 (Scott) & #462028 (fucongcong)
+You stink. 你身上发臭了。 CC-BY 2.0 (France) Attribution: tatoeba.org #4834656 (shekitten) & #7771683 (jiangche)
+All aboard! 请上船! CC-BY 2.0 (France) Attribution: tatoeba.org #22121 (CM) & #5092195 (mirrorvan)
+Am I wrong? 我錯了嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #410779 (CK) & #825125 (Martha)
+Are you up? 你起床了嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1841739 (CK) & #10221072 (xjjAstrus)
+Be careful! 小心! CC-BY 2.0 (France) Attribution: tatoeba.org #2047579 (CK) & #11207038 (klzlueylx)
+Be on time. 要守时! CC-BY 2.0 (France) Attribution: tatoeba.org #2244995 (CK) & #8743793 (crescat)
+Be patient. 耐心等着。 CC-BY 2.0 (France) Attribution: tatoeba.org #1486456 (Spamster) & #5092221 (mirrorvan)
+Birds sing. 鳥兒歌唱。 CC-BY 2.0 (France) Attribution: tatoeba.org #278174 (CK) & #819283 (Martha)
+Can I help? 我可以幫忙嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #266051 (CK) & #908384 (Martha)
+Come on in. 进来。 CC-BY 2.0 (France) Attribution: tatoeba.org #348107 (Zifre) & #5102310 (mirrorvan)
+Definitely! 必须的! CC-BY 2.0 (France) Attribution: tatoeba.org #30542 (CM) & #4505064 (dongwang)
+Definitely! 当然哪! CC-BY 2.0 (France) Attribution: tatoeba.org #30542 (CM) & #11698263 (Jokubas)
+Don't fret. 別擔心。 CC-BY 2.0 (France) Attribution: tatoeba.org #1520777 (Spamster) & #395933 (Martha)
+Don't move! 别动! CC-BY 2.0 (France) Attribution: tatoeba.org #2111911 (CK) & #2531345 (fenfang557)
+Don't move. 不要动。 CC-BY 2.0 (France) Attribution: tatoeba.org #433502 (CK) & #461602 (fucongcong)
+Don't move. 不要动. CC-BY 2.0 (France) Attribution: tatoeba.org #433502 (CK) & #6850362 (mao)
+Don't wait. 不要等待! CC-BY 2.0 (France) Attribution: tatoeba.org #1292208 (CK) & #4970132 (wzhd)
+Fill it up. 把它填滿。 CC-BY 2.0 (France) Attribution: tatoeba.org #322631 (CK) & #825952 (Martha)
+Follow him. 跟著他走。 CC-BY 2.0 (France) Attribution: tatoeba.org #433754 (CK) & #819287 (Martha)
+Go on home. 回家吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2230772 (CK) & #5102214 (mirrorvan)
+Go wash up. 去洗洗吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2230782 (CK) & #8696177 (crescat)
+God exists. 上帝存在。 CC-BY 2.0 (France) Attribution: tatoeba.org #433457 (CK) & #819291 (Martha)
+Good night. 晚安。 CC-BY 2.0 (France) Attribution: tatoeba.org #2362724 (NotApplicable) & #4463431 (maple)
+He gave in. 他让步了. CC-BY 2.0 (France) Attribution: tatoeba.org #296376 (CK) & #1424209 (asosan)
+He is a DJ. 他是一个 DJ 。 CC-BY 2.0 (France) Attribution: tatoeba.org #288669 (CK) & #1878329 (sadhen)
+He is busy. 他很忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #1349951 (sacredceltic) & #343715 (fucongcong)
+He is lazy. 他很懒。 CC-BY 2.0 (France) Attribution: tatoeba.org #299797 (CK) & #343917 (fucongcong)
+He is mean. 他很凶。 CC-BY 2.0 (France) Attribution: tatoeba.org #482973 (minshirui) & #334863 (fucongcong)
+He is poor. 他很穷。 CC-BY 2.0 (France) Attribution: tatoeba.org #516601 (kebukebu) & #336441 (fucongcong)
+He is tall. 他高。 CC-BY 2.0 (France) Attribution: tatoeba.org #773336 (marloncori) & #4887716 (musclegirlxyp)
+Hello, Tom. 你好,汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #54604 (Zifre) & #5092241 (mirrorvan)
+Hey, relax. 嘿,放松点。 CC-BY 2.0 (France) Attribution: tatoeba.org #325177 (CM) & #5102212 (mirrorvan)
+How lovely! 多可爱啊! CC-BY 2.0 (France) Attribution: tatoeba.org #1913086 (CK) & #5092632 (mirrorvan)
+How's work? 工作怎么样? CC-BY 2.0 (France) Attribution: tatoeba.org #245394 (CK) & #5100103 (mirrorvan)
+Hurry home. 赶快回家。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841177 (CK) & #5092584 (mirrorvan)
+I am a man. 我是个男人。 CC-BY 2.0 (France) Attribution: tatoeba.org #386704 (Mouseneb) & #333655 (fucongcong)
+I am short. 我个头矮。 CC-BY 2.0 (France) Attribution: tatoeba.org #436273 (lukaszpp) & #4265202 (notabene)
+I can cook. 我会做饭。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245639 (CK) & #4456369 (plutowu)
+I can swim. 我會游泳。 CC-BY 2.0 (France) Attribution: tatoeba.org #256178 (CK) & #918075 (Martha)
+I can't go. 我不能走。 CC-BY 2.0 (France) Attribution: tatoeba.org #1951742 (CK) & #7771688 (jiangche)
+I can't go. 我走不了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1951742 (CK) & #7771689 (jiangche)
+I chew gum. 我嚼口香糖。 CC-BY 2.0 (France) Attribution: tatoeba.org #2528462 (BoriQa) & #9956903 (GlossaMatik)
+I eat here. 我在這裡吃。 CC-BY 2.0 (France) Attribution: tatoeba.org #449105 (CK) & #826251 (Martha)
+I envy her. 我嫉妒她。 CC-BY 2.0 (France) Attribution: tatoeba.org #1414039 (Eldad) & #5359462 (egg0073)
+I envy him. 我羡慕他。 CC-BY 2.0 (France) Attribution: tatoeba.org #259949 (CK) & #2076343 (sadhen)
+I feel sad. 我很难过。 CC-BY 2.0 (France) Attribution: tatoeba.org #5263414 (CK) & #333736 (fucongcong)
+I hate you. 我恨你。 CC-BY 2.0 (France) Attribution: tatoeba.org #827295 (RaspaKrusto) & #827522 (Martha)
+I heard it. 我聽到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245911 (CK) & #8730182 (shou)
+I know Tom. 我认识汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235724 (CK) & #3630139 (suitchic)
+I know him. 我認識他。 CC-BY 2.0 (France) Attribution: tatoeba.org #71751 (CK) & #825892 (Martha)
+I like tea. 我喜欢茶。 CC-BY 2.0 (France) Attribution: tatoeba.org #253293 (CK) & #399985 (fucongcong)
+I like you. 我喜歡你。 CC-BY 2.0 (France) Attribution: tatoeba.org #410751 (CK) & #762004 (Martha)
+I like you. 我喜欢你。 CC-BY 2.0 (France) Attribution: tatoeba.org #410751 (CK) & #1424394 (sadhen)
+I like you. 我喜欢你! CC-BY 2.0 (France) Attribution: tatoeba.org #410751 (CK) & #9992041 (GlossaMatik)
+I love her. 我愛她。 CC-BY 2.0 (France) Attribution: tatoeba.org #261221 (CK) & #759035 (Martha)
+I love you. 我爱您。 CC-BY 2.0 (France) Attribution: tatoeba.org #1434 (awael58) & #380195 (Martha)
+I miss him. 我想念他。 CC-BY 2.0 (France) Attribution: tatoeba.org #479775 (AniDeer) & #482707 (biglion)
+I miss you. 我想你。 CC-BY 2.0 (France) Attribution: tatoeba.org #1308 (brauliobezerra) & #813490 (fucongcong)
+I miss you. 我想念你。 CC-BY 2.0 (France) Attribution: tatoeba.org #1308 (brauliobezerra) & #2180625 (egg0073)
+I need you. 我需要你。 CC-BY 2.0 (France) Attribution: tatoeba.org #17735 (CK) & #512853 (fucongcong)
+I promised. 我答应了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2123633 (CK) & #10194942 (GlossaMatik)
+I think so. 我想是這樣的。 CC-BY 2.0 (France) Attribution: tatoeba.org #254072 (CK) & #824631 (Martha)
+I use this. 我使用这个。 CC-BY 2.0 (France) Attribution: tatoeba.org #1356774 (sacredceltic) & #1533414 (CLARET)
+I want you. 我想要你。 CC-BY 2.0 (France) Attribution: tatoeba.org #17707 (CK) & #604627 (CLARET)
+I'll do it. 我會做的。 CC-BY 2.0 (France) Attribution: tatoeba.org #433474 (CK) & #819461 (Martha)
+I'm 30 now. 我现在30岁了。 CC-BY 2.0 (France) Attribution: tatoeba.org #5865062 (Ricardo14) & #335364 (fucongcong)
+I'm a hero. 我是個英雄。 CC-BY 2.0 (France) Attribution: tatoeba.org #25509 (CK) & #826001 (Martha)
+I'm a liar. 我是个骗子。 CC-BY 2.0 (France) Attribution: tatoeba.org #1468181 (AMIKEMA) & #8685539 (crescat)
+I'm buying. 我买了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1844179 (CK) & #389383 (fucongcong)
+I'm coming. 我来啦。 CC-BY 2.0 (France) Attribution: tatoeba.org #52081 (CK) & #419683 (GlossaMatik)
+I'm eating. 我正在吃东西。 CC-BY 2.0 (France) Attribution: tatoeba.org #1189719 (Vortarulo) & #1790133 (sadhen)
+I'm faster. 我更快。 CC-BY 2.0 (France) Attribution: tatoeba.org #3378201 (CK) & #3378200 (GlossaMatik)
+I'm humble. 我是謙虛的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2202962 (CK) & #5611553 (verdastelo9604)
+I'm single. 我单身。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111685 (CK) & #4977440 (musclegirlxyp)
+I'm single. 我單身。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111685 (CK) & #5691850 (xjjAstrus)
+I'm sleepy. 我困了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1438701 (tim1452) & #1358461 (sadhen)
+I'm so fat. 我好胖哦。 CC-BY 2.0 (France) Attribution: tatoeba.org #1339 (Zifre) & #50 (fucongcong)
+I'm thirty. 我三十歲。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111679 (CK) & #8767504 (xjjAstrus)
+I'm twelve. 我十二岁了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2069142 (halfb1t) & #9959852 (GlossaMatik)
+Ignore Tom. 别理汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #1868480 (CK) & #5102314 (mirrorvan)
+Is he tall? 他长得高吗? CC-BY 2.0 (France) Attribution: tatoeba.org #302406 (CK) & #8866914 (crescat)
+Is it love? 那是愛嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #663921 (bluepie88) & #3957684 (egg0073)
+Is it true? 是真的吗? CC-BY 2.0 (France) Attribution: tatoeba.org #378827 (CK) & #3377988 (GlossaMatik)
+It is 7:45. 现在是七点四十五分。 CC-BY 2.0 (France) Attribution: tatoeba.org #456101 (lukaszpp) & #2041218 (Venki)
+It is 7:45. 现在是7点45分。 CC-BY 2.0 (France) Attribution: tatoeba.org #456101 (lukaszpp) & #2041220 (Venki)
+It's great. 真是太好了。 CC-BY 2.0 (France) Attribution: tatoeba.org #3824325 (CK) & #5942060 (verdastelo9604)
+It's night. 是晚上了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2187224 (CK) & #6047459 (verdastelo9604)
+It's wrong. 不对。 CC-BY 2.0 (France) Attribution: tatoeba.org #1537010 (Spamster) & #10961087 (xjjAstrus)
+Just relax. 放松点吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1555685 (Spamster) & #5102290 (mirrorvan)
+Keep it up! 坚持。 CC-BY 2.0 (France) Attribution: tatoeba.org #45024 (CK) & #5092492 (mirrorvan)
+Keep it up. 坚持。 CC-BY 2.0 (France) Attribution: tatoeba.org #45026 (CK) & #5092492 (mirrorvan)
+Keep quiet! 保持安静! CC-BY 2.0 (France) Attribution: tatoeba.org #272075 (CK) & #5102187 (mirrorvan)
+Keep quiet. 保持安静! CC-BY 2.0 (France) Attribution: tatoeba.org #272043 (CK) & #5102187 (mirrorvan)
+Let him in. 让他进来。 CC-BY 2.0 (France) Attribution: tatoeba.org #464814 (CK) & #3032023 (sadhen)
+Let me die. 让我去死。 CC-BY 2.0 (France) Attribution: tatoeba.org #1020543 (CK) & #4845112 (pig8322)
+Let me see. 让我想一想。 CC-BY 2.0 (France) Attribution: tatoeba.org #65316 (CK) & #707208 (Yashanti)
+Let me try. 让我试试。 CC-BY 2.0 (France) Attribution: tatoeba.org #1554612 (CK) & #333051 (fucongcong)
+Let me try. 让我来。 CC-BY 2.0 (France) Attribution: tatoeba.org #1554612 (CK) & #5092185 (mirrorvan)
+Let's play. 让我们玩耍吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #324520 (CK) & #9956028 (GlossaMatik)
+Let's pray. 让我们开始祈祷吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2187249 (CK) & #8673663 (crescat)
+Let's walk. 我们走走吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2007935 (CK) & #5897892 (verdastelo9604)
+Look there. 看那里。 CC-BY 2.0 (France) Attribution: tatoeba.org #1635351 (Amastan) & #5092523 (mirrorvan)
+No comment. 无可奉告。 CC-BY 2.0 (France) Attribution: tatoeba.org #873323 (U2FS) & #7774602 (jiangche)
+No kidding? 真的? CC-BY 2.0 (France) Attribution: tatoeba.org #1585482 (ngdongit) & #1397360 (mtdot)
+No kidding? 认真的? CC-BY 2.0 (France) Attribution: tatoeba.org #1585482 (ngdongit) & #10983988 (Elaineeeeee)
+No problem! 没问题! CC-BY 2.0 (France) Attribution: tatoeba.org #413611 (blay_paul) & #2043289 (sadhen)
+No problem. 没关系。 CC-BY 2.0 (France) Attribution: tatoeba.org #551443 (CM) & #333730 (fucongcong)
+No problem. 没问题。 CC-BY 2.0 (France) Attribution: tatoeba.org #551443 (CM) & #343630 (fucongcong)
+No problem. 没事。 CC-BY 2.0 (France) Attribution: tatoeba.org #551443 (CM) & #551441 (GlossaMatik)
+Oh, really? 噢,真的嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2570909 (Hybrid) & #2771144 (cienias)
+Once again. 再一次。 CC-BY 2.0 (France) Attribution: tatoeba.org #433729 (CK) & #826049 (Martha)
+Please sit. 请用座。 CC-BY 2.0 (France) Attribution: tatoeba.org #478180 (CK) & #8500212 (black333)
+She smiled. 她笑了。 CC-BY 2.0 (France) Attribution: tatoeba.org #311898 (CK) & #5092276 (mirrorvan)
+Stand back! 往后站! CC-BY 2.0 (France) Attribution: tatoeba.org #1894221 (Spamster) & #5092607 (mirrorvan)
+Stay sharp. 保持警惕。 CC-BY 2.0 (France) Attribution: tatoeba.org #1627331 (Spamster) & #5092516 (mirrorvan)
+Stay still. 别动。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111509 (CK) & #9958178 (GlossaMatik)
+Stay there. 留在这里别动。 CC-BY 2.0 (France) Attribution: tatoeba.org #462476 (lukaszpp) & #5102231 (mirrorvan)
+Step aside. 让开。 CC-BY 2.0 (France) Attribution: tatoeba.org #40051 (CK) & #5092217 (mirrorvan)
+Step on it! 快一點! CC-BY 2.0 (France) Attribution: tatoeba.org #786811 (hrin) & #4754629 (egg0073)
+Study hard. 好好学习。 CC-BY 2.0 (France) Attribution: tatoeba.org #53465 (CK) & #5092230 (mirrorvan)
+That hurts. 真疼。 CC-BY 2.0 (France) Attribution: tatoeba.org #462526 (lukaszpp) & #5092328 (mirrorvan)
+That's odd. 奇怪。 CC-BY 2.0 (France) Attribution: tatoeba.org #1453153 (Spamster) & #917754 (GlossaMatik)
+That's wet. 那是湿的。 CC-BY 2.0 (France) Attribution: tatoeba.org #6532456 (CK) & #9970073 (GlossaMatik)
+Time flies. 時光飛逝。 CC-BY 2.0 (France) Attribution: tatoeba.org #263886 (CK) & #718352 (egg0073)
+Time flies. 時間匆匆經過。 CC-BY 2.0 (France) Attribution: tatoeba.org #263886 (CK) & #5551139 (verdastelo9604)
+Tom failed. 汤姆失败了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111179 (CK) & #8671326 (crescat)
+Tom is ill. 汤姆生病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236724 (CK) & #10109529 (ColawithIce)
+Tom is ill. 汤姆病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236724 (CK) & #10109530 (ColawithIce)
+Tom is shy. 汤姆害羞。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203345 (CK) & #5663584 (verdastelo9604)
+Tom smiled. 汤姆笑了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005184 (CK) & #5102350 (mirrorvan)
+Tom yawned. 汤姆打哈欠了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2005186 (CK) & #5102359 (mirrorvan)
+Tom's sick. 汤姆生病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107594 (CK) & #10109529 (ColawithIce)
+Tom's sick. 汤姆病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107594 (CK) & #10109530 (ColawithIce)
+Turn right. 向右转。 CC-BY 2.0 (France) Attribution: tatoeba.org #464290 (lukaszpp) & #5092330 (mirrorvan)
+We laughed. 我们笑了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1922452 (teapot) & #5092668 (mirrorvan)
+We lost it. 我们失去了它。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241150 (CK) & #4844980 (pig8322)
+We'll cook. 我们会做饭的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203631 (CK) & #2780382 (GlossaMatik)
+We're boys. 我們是男孩。 CC-BY 2.0 (France) Attribution: tatoeba.org #6874274 (CK) & #825895 (Martha)
+We're late. 我們遲到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107352 (CK) & #848203 (Martha)
+What is it? 它是什么? CC-BY 2.0 (France) Attribution: tatoeba.org #42849 (brauliobezerra) & #4887708 (musclegirlxyp)
+What's new? 有什么新鲜事吗? CC-BY 2.0 (France) Attribution: tatoeba.org #25029 (CK) & #794256 (fucongcong)
+Where am I? 我在哪裡? CC-BY 2.0 (France) Attribution: tatoeba.org #255212 (adjusting) & #884699 (Martha)
+Where am I? 這是什麼地方? CC-BY 2.0 (France) Attribution: tatoeba.org #255212 (adjusting) & #884701 (Martha)
+Who are we? 我們是誰? CC-BY 2.0 (France) Attribution: tatoeba.org #2254698 (CK) & #6146408 (xjjAstrus)
+Who is Tom? 汤姆是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #2587424 (Hybrid) & #4956713 (musclegirlxyp)
+Who is she? 她是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #315731 (CK) & #4887707 (musclegirlxyp)
+Who's next? 下一个是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #2561317 (Hybrid) & #7768204 (jiangche)
+Who's that? 这是谁啊? CC-BY 2.0 (France) Attribution: tatoeba.org #742806 (rpglover64) & #9958407 (GlossaMatik)
+Wood burns. 木材可燃。 CC-BY 2.0 (France) Attribution: tatoeba.org #323576 (CK) & #826256 (Martha)
+You can go. 您可以走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1553295 (CK) & #396894 (GlossaMatik)
+You can go. 你可以去了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1553295 (CK) & #476578 (fucongcong)
+You got me. 算你狠。 CC-BY 2.0 (France) Attribution: tatoeba.org #2254995 (CK) & #2485289 (fenfang557)
+You may go. 您可以走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #518553 (CK) & #396894 (GlossaMatik)
+You may go. 你可以去了。 CC-BY 2.0 (France) Attribution: tatoeba.org #518553 (CK) & #476578 (fucongcong)
+Are we done? 我们完成了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1553536 (CK) & #1783788 (sadhen)
+Are you Tom? 你是汤姆吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1495916 (CK) & #2163114 (sadhen)
+Are you mad? 您生气了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #18965 (CK) & #476597 (fucongcong)
+Are you mad? 你生气了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #18965 (CK) & #476598 (fucongcong)
+Are you new? 你是新来的吗? CC-BY 2.0 (France) Attribution: tatoeba.org #429820 (CM) & #429821 (GlossaMatik)
+Are you sad? 你傷心嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1755584 (Betsemes) & #6073888 (verdastelo9604)
+Are you sad? 你在难过吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1755584 (Betsemes) & #8775843 (crescat)
+Be friendly. 友善点。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111962 (CK) & #5092663 (mirrorvan)
+Be friendly. 友好點。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111962 (CK) & #5571916 (verdastelo9604)
+Be punctual. 要守时! CC-BY 2.0 (France) Attribution: tatoeba.org #2111959 (CK) & #8743793 (crescat)
+Break it up! 停手! CC-BY 2.0 (France) Attribution: tatoeba.org #2245010 (CK) & #5093963 (mirrorvan)
+Can I begin? 我可以开始了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2245038 (CK) & #10194956 (GlossaMatik)
+Can I start? 我可以开始了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #9230028 (CK) & #10194956 (GlossaMatik)
+Can you see? 你能看吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1553530 (CK) & #1783787 (sadhen)
+Come inside. 进来。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111930 (CK) & #5102310 (mirrorvan)
+Count me in. 算我一个. CC-BY 2.0 (France) Attribution: tatoeba.org #42880 (CK) & #1424217 (asosan)
+Did Tom win? 汤姆赢了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2235687 (CK) & #4956719 (musclegirlxyp)
+Do as I say. 按我說的做。 CC-BY 2.0 (France) Attribution: tatoeba.org #2029931 (Spamster) & #6150007 (verdastelo9604)
+Don't laugh. 别笑! CC-BY 2.0 (France) Attribution: tatoeba.org #1771554 (Scott) & #9641453 (jin1)
+Don't leave! 別走! CC-BY 2.0 (France) Attribution: tatoeba.org #872936 (CK) & #6131474 (verdastelo9604)
+Don't panic! 不要恐慌! CC-BY 2.0 (France) Attribution: tatoeba.org #810774 (Zaphod) & #6119462 (verdastelo9604)
+Don't shoot. 停火。 CC-BY 2.0 (France) Attribution: tatoeba.org #1972643 (CK) & #5092693 (mirrorvan)
+Don't shout. 不许大叫。 CC-BY 2.0 (France) Attribution: tatoeba.org #279585 (CK) & #2393083 (fenfang557)
+Don't smile. 不要微笑。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111902 (CK) & #8577720 (GlossaMatik)
+Don't worry. 你不要着急。 CC-BY 2.0 (France) Attribution: tatoeba.org #506446 (rtomharper) & #394139 (GlossaMatik)
+Don't worry. 別擔心。 CC-BY 2.0 (France) Attribution: tatoeba.org #506446 (rtomharper) & #395933 (Martha)
+Don't worry. 别擔心。 CC-BY 2.0 (France) Attribution: tatoeba.org #506446 (rtomharper) & #1959914 (egg0073)
+Get dressed. 你穿點東西。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111832 (CK) & #8727932 (shou)
+Get serious. 认真点。 CC-BY 2.0 (France) Attribution: tatoeba.org #268457 (CK) & #346790 (fucongcong)
+Have a look. 请看一看。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245539 (CK) & #8935907 (crescat)
+He is alone. 他獨自一人。 CC-BY 2.0 (France) Attribution: tatoeba.org #293708 (CK) & #825136 (Martha)
+He was busy. 他很忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #303699 (CK) & #343715 (fucongcong)
+He's a liar. 他是個騙子。 CC-BY 2.0 (France) Attribution: tatoeba.org #1522255 (erikspen) & #8767447 (xjjAstrus)
+He's strong. 他很強壯。 CC-BY 2.0 (France) Attribution: tatoeba.org #295297 (CK) & #819293 (Martha)
+Here we are! 我們到了! CC-BY 2.0 (France) Attribution: tatoeba.org #54174 (CK) & #819471 (Martha)
+Here, catch! 这里,快抓住。 CC-BY 2.0 (France) Attribution: tatoeba.org #6858683 (Hybrid) & #6858750 (SherryChen)
+How are you? 你們好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #373320 (CK) & #1761553 (egg0073)
+How are you? 你好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #373320 (CK) & #6559017 (xjjAstrus)
+How curious! 真奇怪。 CC-BY 2.0 (France) Attribution: tatoeba.org #1913085 (CK) & #1705791 (sadhen)
+How curious! 多怪啊! CC-BY 2.0 (France) Attribution: tatoeba.org #1913085 (CK) & #5092629 (mirrorvan)
+How is life? 生活怎么样? CC-BY 2.0 (France) Attribution: tatoeba.org #2205973 (freddy1) & #402747 (GlossaMatik)
+How strange! 真奇怪。 CC-BY 2.0 (France) Attribution: tatoeba.org #1913092 (CK) & #1705791 (sadhen)
+I also went. 我也去了。 CC-BY 2.0 (France) Attribution: tatoeba.org #262358 (CK) & #400490 (GlossaMatik)
+I am coming. 我來了。 CC-BY 2.0 (France) Attribution: tatoeba.org #65918 (CK) & #826249 (Martha)
+I am online. 我上网了。 CC-BY 2.0 (France) Attribution: tatoeba.org #436415 (lukaszpp) & #797368 (GlossaMatik)
+I buy tapes. 我買磁帶。 CC-BY 2.0 (France) Attribution: tatoeba.org #435445 (CK) & #832833 (Martha)
+I can drive. 我會開車。 CC-BY 2.0 (France) Attribution: tatoeba.org #744722 (CK) & #881297 (Martha)
+I can't say. 我不能说。 CC-BY 2.0 (France) Attribution: tatoeba.org #24897 (CK) & #796833 (fucongcong)
+I don't lie. 我不說謊。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245722 (CK) & #6065390 (verdastelo9604)
+I eat bread. 我吃面包。 CC-BY 2.0 (France) Attribution: tatoeba.org #1867478 (CK) & #843482 (fucongcong)
+I feel cold. 我觉得冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #21124 (CK) & #352054 (fucongcong)
+I feel fine. 我感觉很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #321586 (CK) & #784051 (fucongcong)
+I feel sick. 我有点恶心。 CC-BY 2.0 (France) Attribution: tatoeba.org #759379 (vgigregg) & #8626613 (xjjAstrus)
+I feel weak. 我感到虚弱。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245759 (CK) & #6086795 (verdastelo9604)
+I got lucky. 我运气很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #2199425 (Hybrid) & #437296 (fucongcong)
+I hate fish. 我讨厌鱼。 CC-BY 2.0 (France) Attribution: tatoeba.org #2797586 (CK) & #10194954 (GlossaMatik)
+I hate wine. 我讨厌酒。 CC-BY 2.0 (France) Attribution: tatoeba.org #8909222 (CK) & #10062425 (slo_oth)
+I have time. 我有时间。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245901 (CK) & #4859550 (musclegirlxyp)
+I have wine. 我有酒。 CC-BY 2.0 (France) Attribution: tatoeba.org #1764447 (CK) & #5617204 (verdastelo9604)
+I heard you. 我聽你的。 CC-BY 2.0 (France) Attribution: tatoeba.org #885698 (Trailsend) & #884751 (Tajfun)
+I like blue. 我喜欢蓝色。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245933 (CK) & #3378086 (GlossaMatik)
+I like fish. 我喜欢鱼。 CC-BY 2.0 (France) Attribution: tatoeba.org #256891 (CK) & #5551033 (verdastelo9604)
+I like jazz. 我喜歡爵士樂。 CC-BY 2.0 (France) Attribution: tatoeba.org #321631 (CK) & #826284 (Martha)
+I like them. 我喜欢他们。 CC-BY 2.0 (France) Attribution: tatoeba.org #2747576 (CK) & #7771664 (jiangche)
+I like wine. 我喜欢葡萄酒。 CC-BY 2.0 (France) Attribution: tatoeba.org #5828948 (CK) & #9958185 (GlossaMatik)
+I live here. 我住在這。 CC-BY 2.0 (France) Attribution: tatoeba.org #444986 (CK) & #1488531 (egg0073)
+I live here. 我住在这里。 CC-BY 2.0 (France) Attribution: tatoeba.org #444986 (CK) & #11264800 (asuliu)
+I lost face. 我丟臉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #252374 (CM) & #8572029 (verdastelo9604)
+I need glue. 我需要胶水。 CC-BY 2.0 (France) Attribution: tatoeba.org #2631795 (Joseph) & #5576802 (verdastelo9604)
+I need help. 我需要帮助。 CC-BY 2.0 (France) Attribution: tatoeba.org #582309 (CM) & #7768354 (jiangche)
+I overslept. 我睡过头了。 CC-BY 2.0 (France) Attribution: tatoeba.org #258769 (CK) & #335166 (fucongcong)
+I overslept. 我睡過頭了。 CC-BY 2.0 (France) Attribution: tatoeba.org #258769 (CK) & #5995689 (xjjAstrus)
+I read lips. 我读唇语。 CC-BY 2.0 (France) Attribution: tatoeba.org #2246047 (CK) & #10260764 (GlossaMatik)
+I said that. 我是那樣說的。 CC-BY 2.0 (France) Attribution: tatoeba.org #433643 (CK) & #824597 (Martha)
+I smell gas. 我聞到瓦斯味。 CC-BY 2.0 (France) Attribution: tatoeba.org #681055 (Source_VOA) & #1440981 (egg0073)
+I trust him. 我信赖他。 CC-BY 2.0 (France) Attribution: tatoeba.org #1258628 (CK) & #808210 (fucongcong)
+I trust him. 我信任他。 CC-BY 2.0 (France) Attribution: tatoeba.org #1258628 (CK) & #1762944 (sadhen)
+I trust you. 我信任你。 CC-BY 2.0 (France) Attribution: tatoeba.org #457741 (sacredceltic) & #1878344 (sadhen)
+I want more. 我想要更多。 CC-BY 2.0 (France) Attribution: tatoeba.org #521096 (CK) & #3742594 (egg0073)
+I was alone. 我茕茕孑立,形影相吊。 CC-BY 2.0 (France) Attribution: tatoeba.org #2208338 (CK) & #10537181 (howie)
+I was lucky. 我运气很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #256144 (CK) & #437296 (fucongcong)
+I was wrong. 我搞错了。 CC-BY 2.0 (France) Attribution: tatoeba.org #472431 (blay_paul) & #476229 (fucongcong)
+I was wrong. 我想错了。 CC-BY 2.0 (France) Attribution: tatoeba.org #472431 (blay_paul) & #2367643 (GlossaMatik)
+I went, too. 我也去了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1300817 (CK) & #400490 (GlossaMatik)
+I will obey. 我会听从指示。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247576 (CK) & #5691239 (verdastelo9604)
+I work here. 我在這裡工作。 CC-BY 2.0 (France) Attribution: tatoeba.org #730034 (CK) & #1953193 (egg0073)
+I'll attend. 我會參加。 CC-BY 2.0 (France) Attribution: tatoeba.org #435424 (CK) & #819296 (Martha)
+I'll get in. 我會進去。 CC-BY 2.0 (France) Attribution: tatoeba.org #321895 (CK) & #824616 (Martha)
+I'm 17, too. 我也是17岁。 CC-BY 2.0 (France) Attribution: tatoeba.org #708209 (papabear) & #472869 (fucongcong)
+I'm a loser. 我是個不成器的人。 CC-BY 2.0 (France) Attribution: tatoeba.org #1201482 (CM) & #1448587 (egg0073)
+I'm a loser. 我是個輸家。 CC-BY 2.0 (France) Attribution: tatoeba.org #1201482 (CM) & #5472022 (egg0073)
+I'm a slave. 我是個奴隸。 CC-BY 2.0 (France) Attribution: tatoeba.org #10204809 (shekitten) & #6760109 (xjjAstrus)
+I'm at home. 我在家。 CC-BY 2.0 (France) Attribution: tatoeba.org #404046 (zipangu) & #336238 (fucongcong)
+I'm at home. 我在家裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #404046 (zipangu) & #919764 (Martha)
+I'm curious. 我很好奇。 CC-BY 2.0 (France) Attribution: tatoeba.org #1396179 (CK) & #335059 (fucongcong)
+I'm healthy. 我身体很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #259288 (CK) & #3378000 (GlossaMatik)
+I'm injured. 我受伤了。 CC-BY 2.0 (France) Attribution: tatoeba.org #6196250 (CK) & #10699406 (GlossaMatik)
+I'm kidding. 我开玩笑。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111715 (CK) & #398518 (GlossaMatik)
+I'm married. 我结婚了。 CC-BY 2.0 (France) Attribution: tatoeba.org #257204 (CK) & #399997 (fucongcong)
+I'm married. 我已婚。 CC-BY 2.0 (France) Attribution: tatoeba.org #257204 (CK) & #761438 (Martha)
+I'm praying. 我在祈禱。 CC-BY 2.0 (France) Attribution: tatoeba.org #3530803 (ConqueRRoR) & #6065393 (verdastelo9604)
+I'm reading. 我在读书。 CC-BY 2.0 (France) Attribution: tatoeba.org #1349059 (sacredceltic) & #5640765 (verdastelo9604)
+I'm relaxed. 我很放松。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111695 (CK) & #10023027 (GlossaMatik)
+I'm serious. 我是認真的。 CC-BY 2.0 (France) Attribution: tatoeba.org #433675 (CK) & #824668 (Martha)
+I'm thirsty. 我渴了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1814 (CK) & #465911 (fucongcong)
+I'm wounded. 我受伤了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111666 (CK) & #10699406 (GlossaMatik)
+Is Tom home? 汤姆在家里吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244604 (CK) & #8696451 (morningstar)
+Is Tom hurt? 汤姆受伤了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244607 (CK) & #8696449 (morningstar)
+Is Tom sick? 汤姆是不是身体不太好? CC-BY 2.0 (France) Attribution: tatoeba.org #2244639 (CK) & #8696445 (morningstar)
+Is Tom well? 汤姆还好吧? CC-BY 2.0 (France) Attribution: tatoeba.org #2244644 (CK) & #4473132 (yuiyu)
+Is he right? 他对吗? CC-BY 2.0 (France) Attribution: tatoeba.org #300372 (CK) & #9953366 (GlossaMatik)
+Is it tasty? 好吃嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #5758419 (CM) & #4061623 (egg0073)
+Is it yours? 这是你的吗? CC-BY 2.0 (France) Attribution: tatoeba.org #42344 (CK) & #1311790 (vicch)
+It can't be! 这不可能! CC-BY 2.0 (France) Attribution: tatoeba.org #1501 (CK) & #334699 (fucongcong)
+It can't be! 不可能! CC-BY 2.0 (France) Attribution: tatoeba.org #1501 (CK) & #503298 (fucongcong)
+It's a fake. 这是一个伪造品。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249002 (CK) & #630264 (CLARET)
+It's my job. 這是我份內的事。 CC-BY 2.0 (France) Attribution: tatoeba.org #433521 (CK) & #824695 (Martha)
+It's spring. 春天了 CC-BY 2.0 (France) Attribution: tatoeba.org #456241 (lukaszpp) & #5114843 (xjjAstrus)
+Just say no. 只要說不。 CC-BY 2.0 (France) Attribution: tatoeba.org #827234 (Scott) & #827525 (Martha)
+Keep trying. 继续努力。 CC-BY 2.0 (France) Attribution: tatoeba.org #1629911 (Spamster) & #5092521 (mirrorvan)
+Let me know. 讓我知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #1228083 (CK) & #4741990 (egg0073)
+Let's begin. 讓我們開始吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #387427 (CK) & #819465 (Martha)
+Let's leave. 走吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2007931 (CK) & #334277 (fucongcong)
+Let's start! 讓我們開始吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #387428 (CK) & #819465 (Martha)
+Let's start. 我们开始吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2007928 (CK) & #7767999 (jiangche)
+Life is fun. 人生是有趣的。 CC-BY 2.0 (France) Attribution: tatoeba.org #435772 (CK) & #771359 (Martha)
+Look around. 四处看看。 CC-BY 2.0 (France) Attribution: tatoeba.org #1271905 (Lich) & #5092470 (mirrorvan)
+Lunch is on. 午餐送到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #64177 (Zifre) & #1304156 (tsayng)
+Make a list. 列一个列表。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249574 (CK) & #10199329 (slo_oth)
+Many thanks. 非常感谢! CC-BY 2.0 (France) Attribution: tatoeba.org #322178 (CK) & #334426 (fucongcong)
+Money talks. 金钱万能。 CC-BY 2.0 (France) Attribution: tatoeba.org #18631 (CK) & #5092154 (mirrorvan)
+Nice timing. 好时机。 CC-BY 2.0 (France) Attribution: tatoeba.org #1329340 (Scott) & #5092489 (mirrorvan)
+No one came. 没有人来了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2238072 (gleki) & #501581 (fucongcong)
+OK, you win. 行,你赢了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2722194 (Hybrid) & #10449478 (GlossaMatik)
+OK, you win. 好吧,你赢了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2722194 (Hybrid) & #10449481 (GlossaMatik)
+OK. I agree. 好。我同意。 CC-BY 2.0 (France) Attribution: tatoeba.org #433874 (CK) & #824718 (Martha)
+Please come. 请来吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #324997 (CK) & #5102210 (mirrorvan)
+Please sing. 请唱歌。 CC-BY 2.0 (France) Attribution: tatoeba.org #1937071 (CK) & #5092671 (mirrorvan)
+Release him. 放开他。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841180 (CK) & #5092602 (mirrorvan)
+She bit him. 她咬了他。 CC-BY 2.0 (France) Attribution: tatoeba.org #887002 (CK) & #8940729 (crescat)
+She hit him. 她打了他。 CC-BY 2.0 (France) Attribution: tatoeba.org #887215 (CK) & #5670795 (verdastelo9604)
+Should I go? 我该去吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1454593 (CK) & #414024 (fucongcong)
+Show him in. 让他进来。 CC-BY 2.0 (France) Attribution: tatoeba.org #307894 (CK) & #3032023 (sadhen)
+Stand aside. 一边站着。 CC-BY 2.0 (France) Attribution: tatoeba.org #1935050 (Spamster) & #5092669 (mirrorvan)
+Step inside. 进来。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841184 (CK) & #5102310 (mirrorvan)
+That's life. 這就是生活。 CC-BY 2.0 (France) Attribution: tatoeba.org #515472 (CK) & #771492 (Martha)
+That's life. 人生就是如此。 CC-BY 2.0 (France) Attribution: tatoeba.org #515472 (CK) & #771497 (Martha)
+That's mine. 那是我的。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841577 (CK) & #6728904 (verdastelo9604)
+That's neat. 那很棒。 CC-BY 2.0 (France) Attribution: tatoeba.org #7371381 (Hybrid) & #10021240 (GlossaMatik)
+That's soft. 这很软。 CC-BY 2.0 (France) Attribution: tatoeba.org #3447128 (CK) & #7772143 (jiangche)
+That's tofu. 那是豆腐。 CC-BY 2.0 (France) Attribution: tatoeba.org #11568262 (shekitten) & #3377901 (GlossaMatik)
+That's true. 這是真的。 CC-BY 2.0 (France) Attribution: tatoeba.org #618799 (aandrusiak) & #771357 (Martha)
+They hugged. 他们拥抱。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111370 (CK) & #5698029 (verdastelo9604)
+They kissed. 他们亲吻了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2006560 (Spamster) & #5102369 (mirrorvan)
+This is ice. 這是冰塊。 CC-BY 2.0 (France) Attribution: tatoeba.org #1211442 (alec) & #1205944 (cienias)
+Tom blushed. 汤姆脸红了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1027009 (CK) & #5092418 (mirrorvan)
+Tom clapped. 湯姆拍了手。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111193 (CK) & #5812342 (xjjAstrus)
+Tom frowned. 湯姆皺著眉頭。 CC-BY 2.0 (France) Attribution: tatoeba.org #37029 (CK) & #825907 (Martha)
+Tom got fat. 汤姆胖了。 CC-BY 2.0 (France) Attribution: tatoeba.org #4917994 (CK) & #4977399 (musclegirlxyp)
+Tom got fat. 汤姆变胖了。 CC-BY 2.0 (France) Attribution: tatoeba.org #4917994 (CK) & #4977409 (musclegirlxyp)
+Tom has won. 汤姆胜利了。 CC-BY 2.0 (France) Attribution: tatoeba.org #6358752 (CK) & #4956754 (musclegirlxyp)
+Tom is sick. 汤姆生病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1024872 (CK) & #10109529 (ColawithIce)
+Tom is sick. 汤姆病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1024872 (CK) & #10109530 (ColawithIce)
+Tom laughed. 汤姆笑了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111159 (CK) & #5102350 (mirrorvan)
+Tom said hi. 汤姆打了个招呼。 CC-BY 2.0 (France) Attribution: tatoeba.org #7410485 (CK) & #8765180 (crescat)
+Tom saw you. 湯姆看見你了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2237661 (CK) & #6728914 (verdastelo9604)
+Tom'll wait. 湯姆會等。 CC-BY 2.0 (France) Attribution: tatoeba.org #2123510 (CK) & #6114384 (verdastelo9604)
+Tom's drunk. 汤姆醉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107496 (CK) & #5142201 (musclegirlxyp)
+Tom's happy. 湯姆高興。 CC-BY 2.0 (France) Attribution: tatoeba.org #2602517 (CM) & #6624675 (verdastelo9604)
+Tom's tired. 湯姆累了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107627 (CK) & #6098473 (verdastelo9604)
+Tom's wrong. 湯姆錯了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107659 (CK) & #6293100 (verdastelo9604)
+Turn around. 转过来。 CC-BY 2.0 (France) Attribution: tatoeba.org #464282 (lukaszpp) & #5092329 (mirrorvan)
+Turn it off. 把它关掉。 CC-BY 2.0 (France) Attribution: tatoeba.org #41719 (CK) & #8877851 (crescat)
+Wait for me. 等等我。 CC-BY 2.0 (France) Attribution: tatoeba.org #2253852 (CK) & #7773139 (jiangche)
+Was I wrong? 我错了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #25506 (CK) & #335862 (fucongcong)
+We both won. 我們都贏了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241033 (CK) & #6145390 (verdastelo9604)
+We can rest. 我们可以休息。 CC-BY 2.0 (France) Attribution: tatoeba.org #3046439 (Whitney) & #3031987 (sadhen)
+We know him. 我們認識他。 CC-BY 2.0 (France) Attribution: tatoeba.org #262783 (CK) & #873466 (Martha)
+We like you. 我们喜欢你们。 CC-BY 2.0 (France) Attribution: tatoeba.org #6681958 (CK) & #8496239 (gumblex)
+We love Tom. 我們愛湯姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2240298 (CK) & #5585227 (verdastelo9604)
+We want Tom. 我们想要汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2011273 (CK) & #5091738 (mirrorvan)
+We want one. 我們要一個。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241471 (CK) & #6057679 (xjjAstrus)
+What a pain! 烦死人。 CC-BY 2.0 (France) Attribution: tatoeba.org #282276 (CK) & #405412 (GlossaMatik)
+What a pity! 太可惜了! CC-BY 2.0 (France) Attribution: tatoeba.org #24885 (CK) & #332578 (fucongcong)
+What a pity! 可惜。 CC-BY 2.0 (France) Attribution: tatoeba.org #24885 (CK) & #402763 (GlossaMatik)
+What a pity! 多遗憾啊! CC-BY 2.0 (France) Attribution: tatoeba.org #24885 (CK) & #469440 (fucongcong)
+What a pity! 真是太可惜了! CC-BY 2.0 (France) Attribution: tatoeba.org #24885 (CK) & #2347835 (GlossaMatik)
+What is new? 有什么新鲜事吗? CC-BY 2.0 (France) Attribution: tatoeba.org #376063 (megamanenm) & #794256 (fucongcong)
+What's love? 愛是什麼? CC-BY 2.0 (France) Attribution: tatoeba.org #9359671 (shekitten) & #904854 (Martha)
+What's that? 那是什么? CC-BY 2.0 (France) Attribution: tatoeba.org #66989 (CK) & #465906 (fucongcong)
+What's this? 這是什麼啊? CC-BY 2.0 (France) Attribution: tatoeba.org #413821 (CK) & #4 (Martha)
+What's this? 這是什麼? CC-BY 2.0 (France) Attribution: tatoeba.org #413821 (CK) & #734981 (Martha)
+Where's Tom? 汤姆在哪儿? CC-BY 2.0 (France) Attribution: tatoeba.org #1886594 (CK) & #4956715 (musclegirlxyp)
+Who are you? 你是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #356200 (yorickvidal) & #395853 (GlossaMatik)
+Who are you? 你是誰? CC-BY 2.0 (France) Attribution: tatoeba.org #356200 (yorickvidal) & #818109 (Martha)
+Who drew it? 誰畫的? CC-BY 2.0 (France) Attribution: tatoeba.org #442064 (CK) & #819363 (Martha)
+Who is next? 下一个是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #801609 (Eldad) & #7768204 (jiangche)
+Who is that? 那是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #2176388 (dafp) & #4789686 (400S)
+Who is that? 这是谁啊? CC-BY 2.0 (France) Attribution: tatoeba.org #2176388 (dafp) & #9958407 (GlossaMatik)
+Who's dying? 誰要死了? CC-BY 2.0 (France) Attribution: tatoeba.org #2203655 (CK) & #8215690 (verdastelo9604)
+Whose is it? 这是谁的? CC-BY 2.0 (France) Attribution: tatoeba.org #873579 (CK) & #1314463 (vicch)
+Wood floats. 木头会漂浮。 CC-BY 2.0 (France) Attribution: tatoeba.org #1869662 (ghoti) & #5102316 (mirrorvan)
+Work slowly. 干活慢点。 CC-BY 2.0 (France) Attribution: tatoeba.org #30124 (CK) & #5092211 (mirrorvan)
+Yes, I know. 是的,我知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #35504 (Scott) & #834241 (Martha)
+You cheated. 你作弊了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549802 (CK) & #10635232 (gumblex)
+You made it. 你做到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549800 (CK) & #8215696 (verdastelo9604)
+You're dumb. 你很愚蠢。 CC-BY 2.0 (France) Attribution: tatoeba.org #10519000 (Adelpa) & #993698 (leoyzy)
+You're here. 你在这里。 CC-BY 2.0 (France) Attribution: tatoeba.org #2202941 (CK) & #7768155 (jiangche)
+You're mine. 你是我的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2217883 (CK) & #8686674 (crescat)
+You're safe. 你是安全的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203311 (CK) & #10699370 (GlossaMatik)
+You're sick! 你有病! CC-BY 2.0 (France) Attribution: tatoeba.org #34756 (CM) & #791591 (fucongcong)
+Anything new? 有什么新鲜事吗? CC-BY 2.0 (France) Attribution: tatoeba.org #25313 (CM) & #794256 (fucongcong)
+Are you busy? 你忙嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #68948 (adjusting) & #1241266 (tsayng)
+Are you busy? 您在忙吗? CC-BY 2.0 (France) Attribution: tatoeba.org #68948 (adjusting) & #7772049 (jiangche)
+Are you done? 你做好了嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2244941 (CK) & #765243 (Martha)
+Are you free? 你有空吗? CC-BY 2.0 (France) Attribution: tatoeba.org #434238 (lukaszpp) & #10275184 (miaojiandao)
+Are you lost? 您迷路了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #280393 (CK) & #465006 (fucongcong)
+Are you lost? 你迷路了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #280393 (CK) & #465008 (fucongcong)
+Are you nuts? 你不要命啦! CC-BY 2.0 (France) Attribution: tatoeba.org #2244957 (CK) & #1766125 (sadhen)
+Are you okay? 你没事吧? CC-BY 2.0 (France) Attribution: tatoeba.org #2281516 (ichivivi20) & #10981515 (Elaineeeeee)
+Are you sure? 你确定吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1326 (brauliobezerra) & #343645 (fucongcong)
+Are you sure? 你确定? CC-BY 2.0 (France) Attribution: tatoeba.org #1326 (brauliobezerra) & #4208543 (Ethan_lin)
+Be realistic! 现实点! CC-BY 2.0 (France) Attribution: tatoeba.org #1063982 (CK) & #5092420 (mirrorvan)
+Be realistic. 现实点! CC-BY 2.0 (France) Attribution: tatoeba.org #3821244 (CK) & #5092420 (mirrorvan)
+Bring him in. 带他进来。 CC-BY 2.0 (France) Attribution: tatoeba.org #307895 (CK) & #794243 (fucongcong)
+Call Tom now. 现在给汤姆打电话。 CC-BY 2.0 (France) Attribution: tatoeba.org #3821963 (CK) & #5685926 (verdastelo9604)
+Can we do it? 我們能做到嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2549796 (CK) & #5865511 (verdastelo9604)
+Can you come? 你能來嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #38302 (CK) & #832793 (Martha)
+Can you read? 你能閱讀嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #5195302 (CK) & #5544841 (egg0073)
+Can you sing? 您会唱歌吗? CC-BY 2.0 (France) Attribution: tatoeba.org #6358649 (CK) & #10696069 (GlossaMatik)
+Can you swim? 你會游泳嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #16300 (CK) & #771557 (Martha)
+Can you swim? 你能游泳嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #16300 (CK) & #5919528 (xjjAstrus)
+Can you walk? 你能走嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1453950 (Spamster) & #3713825 (egg0073)
+Can you walk? 你們能走嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1453950 (Spamster) & #3713827 (egg0073)
+Come with me. 跟我走。 CC-BY 2.0 (France) Attribution: tatoeba.org #434458 (lukaszpp) & #10699375 (GlossaMatik)
+Come with us. 和我们一起来吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #433696 (CK) & #345794 (fucongcong)
+Did you call? 你打過電話了嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #433689 (CK) & #824517 (Martha)
+Do you smoke? 你吸烟吗? CC-BY 2.0 (France) Attribution: tatoeba.org #506948 (blay_paul) & #406354 (fucongcong)
+Do you smoke? 你抽不抽烟? CC-BY 2.0 (France) Attribution: tatoeba.org #506948 (blay_paul) & #427174 (GlossaMatik)
+Do you smoke? 您吸烟吗? CC-BY 2.0 (France) Attribution: tatoeba.org #506948 (blay_paul) & #7767753 (jiangche)
+Do your best. 盡力而為。 CC-BY 2.0 (France) Attribution: tatoeba.org #34011 (CK) & #904876 (Martha)
+Don't be sad. 别伤心。 CC-BY 2.0 (France) Attribution: tatoeba.org #317756 (CK) & #7771891 (jiangche)
+Don't be shy. 不要害羞。 CC-BY 2.0 (France) Attribution: tatoeba.org #390924 (Scott) & #823013 (Martha)
+Don't bother. 不用麻烦了。 CC-BY 2.0 (France) Attribution: tatoeba.org #707182 (CK) & #707183 (Yashanti)
+Don't bug me. 别来烦我。 CC-BY 2.0 (France) Attribution: tatoeba.org #1505979 (weihaiping) & #1505477 (fenfang557)
+Don't ramble. 不要东拉西扯。 CC-BY 2.0 (France) Attribution: tatoeba.org #474584 (CM) & #474583 (GlossaMatik)
+Drive safely. 安全地駕駛。 CC-BY 2.0 (France) Attribution: tatoeba.org #484648 (blay_paul) & #819285 (Martha)
+Drive slowly. 开车慢点。 CC-BY 2.0 (France) Attribution: tatoeba.org #30126 (CK) & #5092212 (mirrorvan)
+Examine this. 调查下这个。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111839 (CK) & #8696304 (crescat)
+Ghosts exist. 鬼魂是存在的。 CC-BY 2.0 (France) Attribution: tatoeba.org #324442 (CM) & #5102207 (mirrorvan)
+Give it back. 还回去 CC-BY 2.0 (France) Attribution: tatoeba.org #2951862 (CK) & #5975076 (zhangxr91)
+Good evening. 晚上好。 CC-BY 2.0 (France) Attribution: tatoeba.org #333156 (Aurix) & #333158 (fucongcong)
+Good evening. 晚上好! CC-BY 2.0 (France) Attribution: tatoeba.org #333156 (Aurix) & #6559016 (xjjAstrus)
+Good morning. 早上好! CC-BY 2.0 (France) Attribution: tatoeba.org #2258234 (_undertoad) & #335381 (fucongcong)
+He got angry. 他生气了。 CC-BY 2.0 (France) Attribution: tatoeba.org #507233 (CM) & #389804 (fucongcong)
+He has a car. 他有辆车。 CC-BY 2.0 (France) Attribution: tatoeba.org #513545 (CK) & #493519 (biglion)
+He likes tea. 他喜歡茶。 CC-BY 2.0 (France) Attribution: tatoeba.org #1098268 (cntrational) & #1436794 (egg0073)
+He lost face. 他丢脸了。 CC-BY 2.0 (France) Attribution: tatoeba.org #400048 (CM) & #400049 (GlossaMatik)
+He loves her. 他愛她。 CC-BY 2.0 (France) Attribution: tatoeba.org #394633 (CK) & #824559 (Martha)
+He was brave. 他很勇敢。 CC-BY 2.0 (France) Attribution: tatoeba.org #476456 (CK) & #825871 (Martha)
+He's out now. 他现在出去了。 CC-BY 2.0 (France) Attribution: tatoeba.org #296462 (CK) & #335030 (fucongcong)
+How annoying! 真烦人。 CC-BY 2.0 (France) Attribution: tatoeba.org #1557994 (melospawn) & #5102293 (mirrorvan)
+How horrible! 真糟糕! CC-BY 2.0 (France) Attribution: tatoeba.org #1864457 (kerbear407) & #5550163 (verdastelo9604)
+How's school? 学校怎么样? CC-BY 2.0 (France) Attribution: tatoeba.org #1885868 (CK) & #5096478 (mirrorvan)
+I admire you. 我欣赏你。 CC-BY 2.0 (France) Attribution: tatoeba.org #68937 (CK) & #472364 (fucongcong)
+I almost won. 我几乎赢了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245600 (CK) & #5617203 (verdastelo9604)
+I am Chinese. 我是华人。 CC-BY 2.0 (France) Attribution: tatoeba.org #335138 (CN) & #2629584 (iMaple)
+I am at home. 我在家。 CC-BY 2.0 (France) Attribution: tatoeba.org #29049 (CK) & #336238 (fucongcong)
+I am at home. 我在家裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #29049 (CK) & #919764 (Martha)
+I am curious. 我很好奇。 CC-BY 2.0 (France) Attribution: tatoeba.org #1436 (brauliobezerra) & #335059 (fucongcong)
+I ate apples. 我吃苹果了。 CC-BY 2.0 (France) Attribution: tatoeba.org #3378092 (_undertoad) & #3378091 (GlossaMatik)
+I ate apples. 我吃了蘋果。 CC-BY 2.0 (France) Attribution: tatoeba.org #3378092 (_undertoad) & #8824076 (xjjAstrus)
+I ate caviar. 我吃了魚子醬。 CC-BY 2.0 (France) Attribution: tatoeba.org #2413 (CK) & #917822 (Martha)
+I called Tom. 我給湯姆打了電話。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235710 (CK) & #6119452 (verdastelo9604)
+I can't stay. 我不能留下。 CC-BY 2.0 (France) Attribution: tatoeba.org #1954912 (CK) & #9178049 (xiaohong)
+I can't walk. 我不能走。 CC-BY 2.0 (France) Attribution: tatoeba.org #1955125 (CK) & #7771688 (jiangche)
+I can't walk. 我走不了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1955125 (CK) & #7771689 (jiangche)
+I cried, too. 我也哭了。 CC-BY 2.0 (France) Attribution: tatoeba.org #4497098 (CK) & #10199321 (slo_oth)
+I don't care. 我无所谓。 CC-BY 2.0 (France) Attribution: tatoeba.org #2323 (CK) & #431470 (fucongcong)
+I don't know. 我一无所知。 CC-BY 2.0 (France) Attribution: tatoeba.org #349064 (fatih) & #7772071 (jiangche)
+I don't mind. 我无所谓。 CC-BY 2.0 (France) Attribution: tatoeba.org #257396 (CK) & #431470 (fucongcong)
+I fear death. 我怕死。 CC-BY 2.0 (France) Attribution: tatoeba.org #8974424 (CK) & #335251 (fucongcong)
+I got mugged. 我被抢劫了。 CC-BY 2.0 (France) Attribution: tatoeba.org #6667150 (CK) & #9960188 (GlossaMatik)
+I got robbed. 我被抢劫了。 CC-BY 2.0 (France) Attribution: tatoeba.org #5829164 (CK) & #9960188 (GlossaMatik)
+I have a car. 我有一辆车。 CC-BY 2.0 (France) Attribution: tatoeba.org #252272 (CK) & #342842 (fucongcong)
+I have a cow. 我有一头母牛。 CC-BY 2.0 (France) Attribution: tatoeba.org #2777841 (CM) & #2777842 (GlossaMatik)
+I have a dog. 我有一条狗。 CC-BY 2.0 (France) Attribution: tatoeba.org #378502 (CK) & #414228 (fucongcong)
+I have a map. 我有一張地圖。 CC-BY 2.0 (France) Attribution: tatoeba.org #5829169 (CK) & #6148196 (verdastelo9604)
+I have money. 我有钱。 CC-BY 2.0 (France) Attribution: tatoeba.org #1502828 (CK) & #3378145 (GlossaMatik)
+I have to go. 我该走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887384 (CK) & #8881109 (Rebecca)
+I like beans. 我喜欢豆子。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245931 (CK) & #7767736 (jiangche)
+I like candy. 我喜歡甜食。 CC-BY 2.0 (France) Attribution: tatoeba.org #2745135 (CK) & #1229026 (tsayng)
+I like these. 我喜歡這些東西。 CC-BY 2.0 (France) Attribution: tatoeba.org #4500187 (CK) & #5701328 (verdastelo9604)
+I love music. 我爱音乐。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245965 (CK) & #4620882 (Yashanti)
+I missed you. 我想你。 CC-BY 2.0 (France) Attribution: tatoeba.org #407574 (Scott) & #813490 (fucongcong)
+I missed you. 我想念你。 CC-BY 2.0 (France) Attribution: tatoeba.org #407574 (Scott) & #2180625 (egg0073)
+I need a cab. 我需要一輛出租車。 CC-BY 2.0 (France) Attribution: tatoeba.org #2387428 (CK) & #9179888 (xjjAstrus)
+I need money. 我需要錢。 CC-BY 2.0 (France) Attribution: tatoeba.org #436861 (lukaszpp) & #1959072 (egg0073)
+I see a book. 我看到一本書。 CC-BY 2.0 (France) Attribution: tatoeba.org #816077 (afeinberg) & #816724 (Martha)
+I understand. 我明白了。 CC-BY 2.0 (France) Attribution: tatoeba.org #433468 (CK) & #819294 (Martha)
+I understand. 我懂。 CC-BY 2.0 (France) Attribution: tatoeba.org #433468 (CK) & #10052400 (GlossaMatik)
+I want a box. 我要箱子。 CC-BY 2.0 (France) Attribution: tatoeba.org #11887075 (CK) & #11989561 (corina)
+I want a dog. 我想要一隻狗。 CC-BY 2.0 (France) Attribution: tatoeba.org #2748639 (CM) & #5455270 (egg0073)
+I want a hug. 我想要个抱抱。 CC-BY 2.0 (France) Attribution: tatoeba.org #9999115 (DJ_Saidez) & #10006480 (GlossaMatik)
+I want a map. 我想要一張地圖。 CC-BY 2.0 (France) Attribution: tatoeba.org #8086670 (CM) & #1959991 (egg0073)
+I wrote that. 我寫了那些東西。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247645 (CK) & #5234812 (xjjAstrus)
+I'll sue you. 我要告你。 CC-BY 2.0 (France) Attribution: tatoeba.org #237678 (CK) & #825768 (Martha)
+I'm a waiter. 我是跑堂。 CC-BY 2.0 (France) Attribution: tatoeba.org #5839980 (CK) & #10895462 (xjjAstrus)
+I'm a waiter. 我是服务员。 CC-BY 2.0 (France) Attribution: tatoeba.org #5839980 (CK) & #10895465 (xjjAstrus)
+I'm a waiter. 我是服务生。 CC-BY 2.0 (France) Attribution: tatoeba.org #5839980 (CK) & #10895466 (xjjAstrus)
+I'm all ears. 我洗耳恭聽。 CC-BY 2.0 (France) Attribution: tatoeba.org #320084 (CM) & #827627 (Martha)
+I'm bleeding. 我在流血。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111754 (CK) & #7768262 (jiangche)
+I'm diabetic. 我有糖尿病。 CC-BY 2.0 (France) Attribution: tatoeba.org #5839992 (CK) & #10699400 (GlossaMatik)
+I'm famished. 我肚子饿极了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111735 (CK) & #400030 (GlossaMatik)
+I'm fine now. 已经没事了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247991 (CK) & #5096416 (mirrorvan)
+I'm free now. 我现在有空了。 CC-BY 2.0 (France) Attribution: tatoeba.org #257494 (CK) & #405717 (fucongcong)
+I'm freezing. 我冻死了。 CC-BY 2.0 (France) Attribution: tatoeba.org #21140 (CK) & #10926493 (xjjAstrus)
+I'm innocent. 我是清白的。 CC-BY 2.0 (France) Attribution: tatoeba.org #1563110 (CK) & #1772684 (sadhen)
+I'm new here. 我是新來的。 CC-BY 2.0 (France) Attribution: tatoeba.org #1654228 (Spamster) & #6931240 (verdastelo9604)
+I'm not busy. 我没在忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #261730 (CK) & #7768164 (jiangche)
+I'm not lazy. 我不懒。 CC-BY 2.0 (France) Attribution: tatoeba.org #3330368 (CK) & #9958214 (GlossaMatik)
+I'm not sick. 我没生病。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248178 (CK) & #3031836 (sadhen)
+I'm not sure. 我不确定。 CC-BY 2.0 (France) Attribution: tatoeba.org #1568769 (Sharaf78) & #4764636 (ryanwoo)
+I'm not well. 我身体不适。 CC-BY 2.0 (France) Attribution: tatoeba.org #1474222 (al_ex_an_der) & #1424250 (sadhen)
+I'm pregnant. 我怀孕了。 CC-BY 2.0 (France) Attribution: tatoeba.org #348596 (CM) & #333464 (fucongcong)
+I'm reformed. 我改过自新了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111696 (CK) & #9959595 (GlossaMatik)
+I'm so happy. 我好高興。 CC-BY 2.0 (France) Attribution: tatoeba.org #321673 (CK) & #826258 (Martha)
+I'm so happy. 我太高兴了。 CC-BY 2.0 (France) Attribution: tatoeba.org #321673 (CK) & #3378044 (GlossaMatik)
+I'm so tired! 我好累。 CC-BY 2.0 (France) Attribution: tatoeba.org #967876 (CM) & #785298 (Martha)
+I'm so tired! 我好累啊。 CC-BY 2.0 (France) Attribution: tatoeba.org #967876 (CM) & #10019476 (GlossaMatik)
+I'm so tired. 我好累。 CC-BY 2.0 (France) Attribution: tatoeba.org #785435 (hrin) & #785298 (Martha)
+I'm so tired. 我好累啊。 CC-BY 2.0 (France) Attribution: tatoeba.org #785435 (hrin) & #10019476 (GlossaMatik)
+I'm the best. 我是最好的。 CC-BY 2.0 (France) Attribution: tatoeba.org #755242 (sctld) & #409665 (egg0073)
+I'm thrilled. 我激動不已。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111678 (CK) & #6091682 (verdastelo9604)
+I'm to blame. 这是我的错。 CC-BY 2.0 (France) Attribution: tatoeba.org #2057759 (CK) & #790573 (GlossaMatik)
+I've decided. 我決定了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111662 (CK) & #6114438 (verdastelo9604)
+I've no idea. 我一无所知。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248411 (CK) & #7772071 (jiangche)
+I've seen it. 我見過。 CC-BY 2.0 (France) Attribution: tatoeba.org #254808 (Swift) & #824531 (Martha)
+Ideas matter. 想法很重要。 CC-BY 2.0 (France) Attribution: tatoeba.org #8460518 (shekitten) & #8463682 (gumblex)
+Is Monday OK? 周一可以吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2248475 (CK) & #8765060 (crescat)
+Is Tom drunk? 汤姆喝醉了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244596 (CK) & #8696454 (morningstar)
+Is Tom there? 汤姆在吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1886873 (CK) & #8696442 (morningstar)
+Is that love? 那是愛嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #955144 (CM) & #3957684 (egg0073)
+Is that true? 真的? CC-BY 2.0 (France) Attribution: tatoeba.org #322153 (CK) & #1397360 (mtdot)
+Is this tofu? 这是不是豆腐? CC-BY 2.0 (France) Attribution: tatoeba.org #3377914 (CM) & #3377913 (GlossaMatik)
+It's amazing. 太神奇了。 CC-BY 2.0 (France) Attribution: tatoeba.org #52021 (CM) & #1415890 (sadhen)
+It's bedtime. 睡觉时间到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #498458 (adjusting) & #406727 (fucongcong)
+It's obvious. 很明顯。 CC-BY 2.0 (France) Attribution: tatoeba.org #2283741 (CK) & #6585423 (verdastelo9604)
+It's raining. 下雨了。 CC-BY 2.0 (France) Attribution: tatoeba.org #456237 (lukaszpp) & #346836 (fucongcong)
+It's raining. 在下雨。 CC-BY 2.0 (France) Attribution: tatoeba.org #456237 (lukaszpp) & #409681 (egg0073)
+It's snowing. 下雪了。 CC-BY 2.0 (France) Attribution: tatoeba.org #448963 (CK) & #780269 (Martha)
+It's snowing. 正在下雪。 CC-BY 2.0 (France) Attribution: tatoeba.org #448963 (CK) & #819440 (Martha)
+It's so hard. 太难了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249260 (CK) & #5091653 (mirrorvan)
+It's too big. 它太大了。 CC-BY 2.0 (France) Attribution: tatoeba.org #435409 (CK) & #824484 (Martha)
+It's too hot. 太熱了。 CC-BY 2.0 (France) Attribution: tatoeba.org #267106 (CK) & #5114721 (xjjAstrus)
+Keep looking. 繼續看! CC-BY 2.0 (France) Attribution: tatoeba.org #2111645 (CK) & #3982107 (tsayng)
+Keep reading. 继续看。 CC-BY 2.0 (France) Attribution: tatoeba.org #1815066 (pne) & #5092572 (mirrorvan)
+Keep smiling. 保持微笑。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111637 (CK) & #778735 (Martha)
+Keep working. 繼續工作! CC-BY 2.0 (France) Attribution: tatoeba.org #2111629 (CK) & #3982106 (tsayng)
+Let Tom live. 給湯姆活路! CC-BY 2.0 (France) Attribution: tatoeba.org #2262231 (CK) & #8215729 (verdastelo9604)
+Let me think. 讓我想一想。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249525 (CK) & #4504253 (egg0073)
+Let's go now. 我们现在去吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #477190 (CM) & #476615 (fucongcong)
+Life goes on. 人生會繼續。 CC-BY 2.0 (France) Attribution: tatoeba.org #477368 (BlueLagoon) & #3982108 (tsayng)
+Look closely. 仔細看 CC-BY 2.0 (France) Attribution: tatoeba.org #2111608 (CK) & #5113359 (xjjAstrus)
+Mary came in. 瑪麗進來了。 CC-BY 2.0 (France) Attribution: tatoeba.org #388762 (CK) & #826109 (Martha)
+Mary is tall. 瑪麗很高。 CC-BY 2.0 (France) Attribution: tatoeba.org #31892 (CK) & #824585 (Martha)
+May I go now? 我现在能去了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2846104 (englishchinese) & #476637 (fucongcong)
+Move quietly. 轻轻地移动。 CC-BY 2.0 (France) Attribution: tatoeba.org #890756 (Scott) & #5102260 (mirrorvan)
+My eyes hurt. 我的眼睛痛。 CC-BY 2.0 (France) Attribution: tatoeba.org #417801 (CK) & #826045 (Martha)
+No one knows. 沒有人知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #449023 (CK) & #825148 (Martha)
+No one knows. 谁也不知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #449023 (CK) & #8736993 (crescat)
+Nobody asked. 没人问过。 CC-BY 2.0 (France) Attribution: tatoeba.org #1737422 (Spamster) & #5092545 (mirrorvan)
+Nobody knows. 谁也不知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841593 (CK) & #8736993 (crescat)
+Open the box. 打開箱子。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249744 (CK) & #6293087 (verdastelo9604)
+Please hurry. 请抓紧时间。 CC-BY 2.0 (France) Attribution: tatoeba.org #19733 (Swift) & #5092158 (mirrorvan)
+Please leave. 請你離開。 CC-BY 2.0 (France) Attribution: tatoeba.org #516403 (CK) & #819382 (Martha)
+Please smile. 请笑一笑! CC-BY 2.0 (France) Attribution: tatoeba.org #1852296 (CK) & #10617861 (han637376)
+See you soon! 一会儿见! CC-BY 2.0 (France) Attribution: tatoeba.org #32672 (CK) & #337874 (fucongcong)
+See you soon! 一會兒見! CC-BY 2.0 (France) Attribution: tatoeba.org #32672 (CK) & #6559028 (xjjAstrus)
+See you then. 到時候見。 CC-BY 2.0 (France) Attribution: tatoeba.org #47013 (CK) & #824671 (Martha)
+Shame on you! 你真丢脸! CC-BY 2.0 (France) Attribution: tatoeba.org #277287 (CK) & #791631 (fucongcong)
+Shame on you. 你真丢脸! CC-BY 2.0 (France) Attribution: tatoeba.org #2649236 (CK) & #791631 (fucongcong)
+She is quiet. 她很安静。 CC-BY 2.0 (France) Attribution: tatoeba.org #315385 (CK) & #6307284 (gumblex)
+She is upset. 她心情不好。 CC-BY 2.0 (France) Attribution: tatoeba.org #979271 (Serhiy) & #843498 (fucongcong)
+She knows me. 她认识我。 CC-BY 2.0 (France) Attribution: tatoeba.org #314454 (CK) & #4970146 (wzhd)
+She may come. 她可以來。 CC-BY 2.0 (France) Attribution: tatoeba.org #388731 (CK) & #826110 (Martha)
+She may come. 她也許來。 CC-BY 2.0 (France) Attribution: tatoeba.org #388731 (CK) & #826112 (Martha)
+Someone came. 有人来了。 CC-BY 2.0 (France) Attribution: tatoeba.org #908398 (CK) & #5092398 (mirrorvan)
+Speak softly. 你说话小点声。 CC-BY 2.0 (France) Attribution: tatoeba.org #2800093 (CK) & #7767745 (jiangche)
+Stay with us. 和我们留在一起吧! CC-BY 2.0 (France) Attribution: tatoeba.org #660408 (CM) & #7768128 (jiangche)
+Stop gawking. 别再傻看着。 CC-BY 2.0 (France) Attribution: tatoeba.org #693620 (CM) & #5102246 (mirrorvan)
+Stop reading. 别再念了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1738962 (CK) & #5092552 (mirrorvan)
+Stop staring. 别再盯着了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1943890 (Spamster) & #5092672 (mirrorvan)
+Stop talking. 不要说话了。 CC-BY 2.0 (France) Attribution: tatoeba.org #277720 (CK) & #5092251 (mirrorvan)
+Stop whining. 别再埋怨了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2029950 (Spamster) & #5102375 (mirrorvan)
+Stop yelling! 别再喊叫了! CC-BY 2.0 (France) Attribution: tatoeba.org #1908512 (Spamster) & #5092620 (mirrorvan)
+Sweet dreams! 祝你好梦。 CC-BY 2.0 (France) Attribution: tatoeba.org #30054 (CK) & #3781063 (Debbie_Linder)
+Take it easy. 放輕鬆。 CC-BY 2.0 (France) Attribution: tatoeba.org #20344 (CK) & #825917 (Martha)
+Take it easy. 別緊張。 CC-BY 2.0 (France) Attribution: tatoeba.org #20344 (CK) & #825918 (Martha)
+Take me home. 带我回家。 CC-BY 2.0 (France) Attribution: tatoeba.org #462494 (lukaszpp) & #465919 (fucongcong)
+Tell us more. 告訴我們多一點。 CC-BY 2.0 (France) Attribution: tatoeba.org #1224954 (CK) & #4754633 (egg0073)
+That is mine. 那是我的。 CC-BY 2.0 (France) Attribution: tatoeba.org #67126 (CK) & #6728904 (verdastelo9604)
+That's crazy. 那是瘋狂的。 CC-BY 2.0 (France) Attribution: tatoeba.org #509156 (CK) & #826184 (Martha)
+That's great. 那真是太好了。 CC-BY 2.0 (France) Attribution: tatoeba.org #462546 (lukaszpp) & #5978354 (verdastelo9604)
+That's right! 對了! CC-BY 2.0 (France) Attribution: tatoeba.org #433490 (CK) & #8215699 (verdastelo9604)
+That's right. 对! CC-BY 2.0 (France) Attribution: tatoeba.org #1216015 (AlanRominger) & #4952918 (murr)
+That's weird. 奇怪。 CC-BY 2.0 (France) Attribution: tatoeba.org #320329 (CK) & #917754 (GlossaMatik)
+That's wrong. 不对。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111384 (CK) & #10961087 (xjjAstrus)
+They refused. 他們拒絕了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111364 (CK) & #6073881 (verdastelo9604)
+They're fake. 它们是假的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111296 (CK) & #7769298 (jiangche)
+They're gone. 他们离开了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1898125 (CK) & #8696255 (crescat)
+They're kids. 他们是孩子。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111267 (CK) & #3579720 (CLARET)
+They're kids. 她们是孩子。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111267 (CK) & #3579729 (CLARET)
+This is mine. 这是我的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2233709 (CK) & #4760167 (ryanwoo)
+This is neat. 这很棒。 CC-BY 2.0 (France) Attribution: tatoeba.org #7371380 (Hybrid) & #10021182 (GlossaMatik)
+This is tofu. 这是豆腐。 CC-BY 2.0 (France) Attribution: tatoeba.org #3377900 (CM) & #3377899 (GlossaMatik)
+This is true. 這是真的。 CC-BY 2.0 (France) Attribution: tatoeba.org #433544 (CK) & #771357 (Martha)
+Tom can walk. 汤姆能走路。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236150 (CK) & #10260810 (GlossaMatik)
+Tom followed. 汤姆跟着。 CC-BY 2.0 (France) Attribution: tatoeba.org #3721793 (CM) & #5869907 (verdastelo9604)
+Tom is blind. 汤姆瞎了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1536837 (Spamster) & #9971592 (GlossaMatik)
+Tom is clean. 湯姆是乾净的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2202652 (CK) & #6923176 (verdastelo9604)
+Tom is drunk. 汤姆醉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236670 (CK) & #5142201 (musclegirlxyp)
+Tom is happy. 湯姆高興。 CC-BY 2.0 (France) Attribution: tatoeba.org #1025016 (CK) & #6624675 (verdastelo9604)
+Tom is smart. 汤姆脑子好使。 CC-BY 2.0 (France) Attribution: tatoeba.org #1024870 (CK) & #5072415 (musclegirlxyp)
+Tom is tired. 湯姆累了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203461 (CK) & #6098473 (verdastelo9604)
+Tom just ate. 汤姆刚吃完饭。 CC-BY 2.0 (France) Attribution: tatoeba.org #6358749 (CK) & #11698444 (Jokubas)
+Tom knows me. Tom認識我。 CC-BY 2.0 (France) Attribution: tatoeba.org #2237133 (CK) & #3957663 (egg0073)
+Tom sat down. 汤姆坐下了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2237642 (CK) & #4977379 (musclegirlxyp)
+Tom told him. 汤姆告诉了他。 CC-BY 2.0 (France) Attribution: tatoeba.org #2238815 (CK) & #5576791 (verdastelo9604)
+Tom vanished. 汤姆不见了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203879 (CK) & #5092425 (mirrorvan)
+Tom was full. 汤姆饱了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549746 (CK) & #5780567 (verdastelo9604)
+Tom's lonely. 汤姆很孤独。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107562 (CK) & #7781773 (jiangche)
+Tom's thirty. 汤姆今年三十岁。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107623 (CK) & #8738755 (crescat)
+Tom, wake up. 汤姆,快起来! CC-BY 2.0 (France) Attribution: tatoeba.org #2429769 (CK) & #2431750 (fenfang557)
+Try it again. 再試一次。 CC-BY 2.0 (France) Attribution: tatoeba.org #433594 (CK) & #824621 (Martha)
+Try it again. 再试一下。 CC-BY 2.0 (France) Attribution: tatoeba.org #433594 (CK) & #8496264 (maxine)
+Unbelievable! 難以置信! CC-BY 2.0 (France) Attribution: tatoeba.org #268828 (CM) & #1423421 (cienias)
+Unbelievable! 难以置信! CC-BY 2.0 (France) Attribution: tatoeba.org #268828 (CM) & #4505070 (dongwang)
+Vote for Tom. 投票給湯姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2240284 (CK) & #6101261 (verdastelo9604)
+Wait and see. 走著瞧 CC-BY 2.0 (France) Attribution: tatoeba.org #945292 (nibuen) & #6915645 (zzztat)
+We are happy. 我們很快樂。 CC-BY 2.0 (France) Attribution: tatoeba.org #438940 (CK) & #908550 (Martha)
+We can begin. 我們能開始。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241034 (CK) & #6145407 (verdastelo9604)
+We know that. 我们知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241138 (CK) & #5102291 (mirrorvan)
+We know this. 我们知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241139 (CK) & #5102291 (mirrorvan)
+We need more. 我們需要更多。 CC-BY 2.0 (France) Attribution: tatoeba.org #874919 (CK) & #4754631 (egg0073)
+We overslept. 我们睡过头了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107667 (CK) & #3399432 (GlossaMatik)
+We succeeded. 我们成功了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841559 (CK) & #5102311 (mirrorvan)
+We surrender. 我們投降。 CC-BY 2.0 (France) Attribution: tatoeba.org #2246291 (Hybrid) & #6064608 (verdastelo9604)
+We're adults. 我们已是成年人了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107331 (CK) & #7772576 (jiangche)
+We're heroes. 我們是英雄。 CC-BY 2.0 (France) Attribution: tatoeba.org #8918365 (CK) & #9155254 (shou)
+We're hiding. 我们在藏着。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203697 (CK) & #5640754 (verdastelo9604)
+We're humans. 我们是人。 CC-BY 2.0 (France) Attribution: tatoeba.org #9494304 (DJ_Saidez) & #335262 (fucongcong)
+We're people. 我们是人。 CC-BY 2.0 (France) Attribution: tatoeba.org #9494600 (DJ_Saidez) & #335262 (fucongcong)
+Welcome back. 欢迎回来。 CC-BY 2.0 (France) Attribution: tatoeba.org #1627336 (Spamster) & #5092518 (mirrorvan)
+Welcome home. 欢迎回家。 CC-BY 2.0 (France) Attribution: tatoeba.org #64693 (Scott) & #333068 (fucongcong)
+What is love? 愛是什麼? CC-BY 2.0 (France) Attribution: tatoeba.org #515085 (tamsanh) & #904854 (Martha)
+What is that? 那是什么? CC-BY 2.0 (France) Attribution: tatoeba.org #464592 (lukaszpp) & #465906 (fucongcong)
+What is that? 那是什么啊? CC-BY 2.0 (France) Attribution: tatoeba.org #464592 (lukaszpp) & #1420649 (sadhen)
+What is this? 這是什麼啊? CC-BY 2.0 (France) Attribution: tatoeba.org #392210 (sysko) & #4 (Martha)
+What is this? 這是什麼? CC-BY 2.0 (France) Attribution: tatoeba.org #392210 (sysko) & #734981 (Martha)
+Where is Tom? 汤姆在哪儿? CC-BY 2.0 (France) Attribution: tatoeba.org #2240332 (CK) & #4956715 (musclegirlxyp)
+Who built it? 这是谁建的? CC-BY 2.0 (France) Attribution: tatoeba.org #276317 (CK) & #334743 (fucongcong)
+Who wants it? 谁想要它? CC-BY 2.0 (France) Attribution: tatoeba.org #2011277 (CK) & #10182737 (slo_oth)
+Who was here? 谁来了这里? CC-BY 2.0 (France) Attribution: tatoeba.org #2254890 (CK) & #6047439 (verdastelo9604)
+Years passed. 多少年过去了。 CC-BY 2.0 (France) Attribution: tatoeba.org #282197 (CK) & #5092260 (mirrorvan)
+You are good. 你很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #1120755 (cntrational) & #4881733 (musclegirlxyp)
+You're drunk. 你喝醉了! CC-BY 2.0 (France) Attribution: tatoeba.org #1895619 (CK) & #7768302 (jiangche)
+You're lying. 你在撒谎。 CC-BY 2.0 (France) Attribution: tatoeba.org #1358271 (CK) & #332572 (fucongcong)
+You're sharp. 你很聰明。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203340 (CK) & #778737 (Martha)
+You're smart. 你很聰明。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203371 (CK) & #778737 (Martha)
+Anything else? 还有别的吗? CC-BY 2.0 (France) Attribution: tatoeba.org #434224 (lukaszpp) & #5102215 (mirrorvan)
+Are they cute? 他們可愛嗎 ? CC-BY 2.0 (France) Attribution: tatoeba.org #2244915 (CK) & #11940010 (corina)
+Are you angry? 您生气了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #476326 (Hybrid) & #476597 (fucongcong)
+Are you angry? 你生气了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #476326 (Hybrid) & #476598 (fucongcong)
+Are you happy? 你快樂嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #16164 (CK) & #819454 (Martha)
+Are you happy? 你开心吗? CC-BY 2.0 (France) Attribution: tatoeba.org #16164 (CK) & #8924804 (crescat)
+Are you ready? 您准备好了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #376424 (saeb) & #799300 (fucongcong)
+Are you ready? 你们准备好了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #376424 (saeb) & #799301 (fucongcong)
+Are you ready? 你准备好了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #376424 (saeb) & #799302 (fucongcong)
+Are you there? 你在吗? CC-BY 2.0 (France) Attribution: tatoeba.org #30970 (CK) & #479053 (GlossaMatik)
+Are you tired? 你累了嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #317830 (CK) & #727916 (Martha)
+Are you tired? 你覺得累嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #317830 (CK) & #3742432 (egg0073)
+Ask Tom again. 再问一下汤姆吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235643 (CK) & #8700793 (crescat)
+Bring the key. 帶鑰匙來。 CC-BY 2.0 (France) Attribution: tatoeba.org #507763 (CM) & #6086840 (verdastelo9604)
+Call security! 叫保安来! CC-BY 2.0 (France) Attribution: tatoeba.org #1682859 (Spamster) & #5092526 (mirrorvan)
+Can I have it? 可以给我吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3172313 (CK) & #8725787 (crescat)
+Can you drive? 您会开车吗? CC-BY 2.0 (France) Attribution: tatoeba.org #69237 (CK) & #472411 (fucongcong)
+Can you skate? 你会溜冰吗? CC-BY 2.0 (France) Attribution: tatoeba.org #70016 (CK) & #332557 (fucongcong)
+Cats are cute. 猫咪很可爱。 CC-BY 2.0 (France) Attribution: tatoeba.org #5649044 (Hybrid) & #10981526 (Elaineeeeee)
+Check, please. 請結帳。 CC-BY 2.0 (France) Attribution: tatoeba.org #21098 (CK) & #819284 (Martha)
+Did Tom reply? 汤姆有回应了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3395387 (CK) & #4885087 (musclegirlxyp)
+Did you write? 你写吗? CC-BY 2.0 (France) Attribution: tatoeba.org #8108705 (haukie) & #6850332 (mao)
+Do I know you? 我认识你吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1461944 (Spamster) & #1790170 (sadhen)
+Do you follow? 懂了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #319999 (CK) & #2032276 (ydcok)
+Do you get it? 懂么? CC-BY 2.0 (France) Attribution: tatoeba.org #1538886 (CK) & #2367531 (GlossaMatik)
+Don't be rude. 不要失礼。 CC-BY 2.0 (France) Attribution: tatoeba.org #1860512 (CK) & #9963168 (GlossaMatik)
+Don't give up! 不要放棄! CC-BY 2.0 (France) Attribution: tatoeba.org #278606 (CK) & #785373 (Martha)
+Don't hate me. 不要恨我。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245350 (CK) & #767118 (Martha)
+Don't mind me. 不要管我。 CC-BY 2.0 (France) Attribution: tatoeba.org #249787 (CK) & #405821 (GlossaMatik)
+Don't tell me. 不要告诉我。 CC-BY 2.0 (France) Attribution: tatoeba.org #239720 (CK) & #9968947 (GlossaMatik)
+Draw a circle. 画一个圈。 CC-BY 2.0 (France) Attribution: tatoeba.org #25954 (CK) & #630268 (CLARET)
+Eat and drink. 吃吧,喝吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #37659 (CM) & #4760009 (ryanwoo)
+Flowers bloom. 鮮花盛開。 CC-BY 2.0 (France) Attribution: tatoeba.org #23749 (CK) & #819286 (Martha)
+Hang in there. 坚持。 CC-BY 2.0 (France) Attribution: tatoeba.org #2173924 (Hybrid) & #5092492 (mirrorvan)
+He dug a hole. 他挖了一个洞。 CC-BY 2.0 (France) Attribution: tatoeba.org #295871 (CK) & #414486 (fucongcong)
+He has a cold. 他着凉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #289527 (CK) & #334129 (fucongcong)
+He is a thief. 这是一个小偷。 CC-BY 2.0 (France) Attribution: tatoeba.org #301724 (Dorenda) & #630270 (CLARET)
+He is at home. 他在家裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #816868 (Cindrogriza) & #816870 (Martha)
+He is my type! 他是我的菜! CC-BY 2.0 (France) Attribution: tatoeba.org #284379 (CK) & #817282 (fucongcong)
+He is no fool. 他不是傻子。 CC-BY 2.0 (France) Attribution: tatoeba.org #302396 (CM) & #429141 (fucongcong)
+He is out now. 他现在出去了。 CC-BY 2.0 (France) Attribution: tatoeba.org #289262 (CK) & #335030 (fucongcong)
+He lied to me. 他对我撒谎。 CC-BY 2.0 (France) Attribution: tatoeba.org #297564 (CK) & #9973007 (GlossaMatik)
+He lied to us. 他欺騙了我們。 CC-BY 2.0 (France) Attribution: tatoeba.org #388832 (CK) & #826013 (Martha)
+He sells cars. 他賣車子。 CC-BY 2.0 (France) Attribution: tatoeba.org #434996 (lukaszpp) & #778540 (Martha)
+He shot at me. 他槍擊了我。 CC-BY 2.0 (France) Attribution: tatoeba.org #71962 (CK) & #793302 (Martha)
+He tries hard. 他努力地嘗試。 CC-BY 2.0 (France) Attribution: tatoeba.org #293742 (CK) & #882979 (Martha)
+He walks fast. 他走路很快。 CC-BY 2.0 (France) Attribution: tatoeba.org #1257313 (CK) & #8888278 (crescat)
+He wants more. 他想要更多。 CC-BY 2.0 (France) Attribution: tatoeba.org #1723957 (Spamster) & #4754634 (egg0073)
+He's American. 他是美国人。 CC-BY 2.0 (France) Attribution: tatoeba.org #5226614 (jaxhere) & #332941 (fucongcong)
+He's not home. 他不在家。 CC-BY 2.0 (France) Attribution: tatoeba.org #1310853 (donkirkby) & #765282 (Martha)
+He's studying. 他在讀書。 CC-BY 2.0 (France) Attribution: tatoeba.org #593281 (CK) & #3713556 (egg0073)
+Hi, everybody. 大家好! CC-BY 2.0 (France) Attribution: tatoeba.org #3924471 (BHO) & #466655 (GlossaMatik)
+How about you? 你怎麼樣? CC-BY 2.0 (France) Attribution: tatoeba.org #16491 (CK) & #825882 (Martha)
+How about you? 那你呢? CC-BY 2.0 (France) Attribution: tatoeba.org #16491 (CK) & #825883 (Martha)
+How about you? 你們呢? CC-BY 2.0 (France) Attribution: tatoeba.org #16491 (CK) & #1623187 (egg0073)
+How about you? 您呢? CC-BY 2.0 (France) Attribution: tatoeba.org #16491 (CK) & #1623188 (Yashanti)
+How beautiful! 多美啊! CC-BY 2.0 (France) Attribution: tatoeba.org #1913083 (CK) & #5092623 (mirrorvan)
+I am diabetic. 我有糖尿病。 CC-BY 2.0 (France) Attribution: tatoeba.org #436327 (lukaszpp) & #10699400 (GlossaMatik)
+I am divorced. 我离婚了。 CC-BY 2.0 (France) Attribution: tatoeba.org #436329 (lukaszpp) & #471133 (fucongcong)
+I am sneezing. 我打喷嚏了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1661181 (Amastan) & #9970071 (GlossaMatik)
+I am very sad. 我很难过。 CC-BY 2.0 (France) Attribution: tatoeba.org #1136927 (soj4l) & #333736 (fucongcong)
+I approved it. 我同意。 CC-BY 2.0 (France) Attribution: tatoeba.org #5840527 (CK) & #333224 (fucongcong)
+I believe you. 我相信你。 CC-BY 2.0 (France) Attribution: tatoeba.org #17421 (CK) & #335418 (fucongcong)
+I came by car. 我开车来的。 CC-BY 2.0 (France) Attribution: tatoeba.org #5829211 (CK) & #10230465 (GlossaMatik)
+I can feel it. 我感觉得到它。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841705 (CK) & #10699360 (GlossaMatik)
+I can hear it. 我听得到。 CC-BY 2.0 (France) Attribution: tatoeba.org #6358574 (CK) & #8727966 (crescat)
+I can see Tom. 我看得见汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2301319 (CK) & #4977389 (musclegirlxyp)
+I can't do it. 我無法做到這一點。 CC-BY 2.0 (France) Attribution: tatoeba.org #25544 (CK) & #793250 (Martha)
+I can't do it. 我做不到。 CC-BY 2.0 (France) Attribution: tatoeba.org #25544 (CK) & #7768005 (jiangche)
+I can't leave. 我不能走。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245649 (CK) & #7771688 (jiangche)
+I can't leave. 我走不了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245649 (CK) & #7771689 (jiangche)
+I despise you. 我鄙视你。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245678 (CK) & #5067373 (jiaweikai)
+I did my best. 我做得好到不能再好了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1075109 (shanghainese) & #335046 (fucongcong)
+I didn't pass. 我没通过。 CC-BY 2.0 (France) Attribution: tatoeba.org #5840503 (CK) & #5931757 (verdastelo9604)
+I didn't sing. 我沒唱。 CC-BY 2.0 (France) Attribution: tatoeba.org #2315009 (CK) & #10040357 (verdastelo9604)
+I don't smoke. 我不抽烟。 CC-BY 2.0 (France) Attribution: tatoeba.org #40662 (CK) & #398950 (GlossaMatik)
+I fed the dog. 我餵過狗了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1988362 (CK) & #727575 (Martha)
+I feel lonely. 我觉得很孤独。 CC-BY 2.0 (France) Attribution: tatoeba.org #1487874 (sugoi) & #334544 (fucongcong)
+I feel unwell. 我感觉不舒服。 CC-BY 2.0 (France) Attribution: tatoeba.org #1605758 (fanty) & #501698 (fucongcong)
+I felt lonely. 我觉得很孤独。 CC-BY 2.0 (France) Attribution: tatoeba.org #257310 (CK) & #334544 (fucongcong)
+I got it free. 我是免費得到的。 CC-BY 2.0 (France) Attribution: tatoeba.org #42714 (CM) & #886567 (Martha)
+I hate French. 我讨厌法语。 CC-BY 2.0 (France) Attribution: tatoeba.org #2451690 (CK) & #10204580 (GlossaMatik)
+I hate winter. 我恨冬天。 CC-BY 2.0 (France) Attribution: tatoeba.org #2516436 (CK) & #10260800 (GlossaMatik)
+I hate winter. 我讨厌冬天。 CC-BY 2.0 (France) Attribution: tatoeba.org #2516436 (CK) & #10260801 (GlossaMatik)
+I have a bike. 我有一輛自行車。 CC-BY 2.0 (France) Attribution: tatoeba.org #5829218 (CK) & #5112366 (xjjAstrus)
+I have a boat. 我有一艘小船。 CC-BY 2.0 (France) Attribution: tatoeba.org #5829220 (CK) & #9179805 (xjjAstrus)
+I have a cold. 我感冒了。 CC-BY 2.0 (France) Attribution: tatoeba.org #321954 (CK) & #488753 (GlossaMatik)
+I have a home. 我有一个家。 CC-BY 2.0 (France) Attribution: tatoeba.org #1786134 (gleki) & #1786136 (sadhen)
+I have an egg. 我有一只蛋。 CC-BY 2.0 (France) Attribution: tatoeba.org #262179 (CK) & #791582 (fucongcong)
+I have asthma. 我有哮喘。 CC-BY 2.0 (France) Attribution: tatoeba.org #5829223 (CK) & #10699398 (GlossaMatik)
+I have cancer. 我有癌症。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245875 (CK) & #10699402 (GlossaMatik)
+I have to win. 我必须赢。 CC-BY 2.0 (France) Attribution: tatoeba.org #1744787 (Amastan) & #5780576 (verdastelo9604)
+I just got up. 我刚才起床了。 CC-BY 2.0 (France) Attribution: tatoeba.org #398493 (CM) & #398497 (GlossaMatik)
+I like soccer. 我喜歡足球。 CC-BY 2.0 (France) Attribution: tatoeba.org #5840429 (CK) & #5568572 (egg0073)
+I like sports. 我喜歡運動。 CC-BY 2.0 (France) Attribution: tatoeba.org #435162 (CK) & #771412 (Martha)
+I like to eat. 我喜歡吃。 CC-BY 2.0 (France) Attribution: tatoeba.org #773320 (marloncori) & #1225693 (tsayng)
+I like to run. 我喜欢跑步。 CC-BY 2.0 (France) Attribution: tatoeba.org #259193 (CK) & #363979 (fucongcong)
+I lost my key. 我钥匙丢了。 CC-BY 2.0 (France) Attribution: tatoeba.org #460058 (saasmath) & #9970755 (GlossaMatik)
+I love French. 我爱法语。 CC-BY 2.0 (France) Attribution: tatoeba.org #2451688 (CK) & #10696118 (GlossaMatik)
+I love coffee. 我愛咖啡。 CC-BY 2.0 (France) Attribution: tatoeba.org #916292 (CK) & #6105239 (verdastelo9604)
+I love movies. 我愛電影。 CC-BY 2.0 (France) Attribution: tatoeba.org #521657 (CK) & #824560 (Martha)
+I love nature. 我愛大自然。 CC-BY 2.0 (France) Attribution: tatoeba.org #769668 (Zifre) & #769662 (Martha)
+I love sports. 我喜歡運動。 CC-BY 2.0 (France) Attribution: tatoeba.org #930030 (CM) & #771412 (Martha)
+I miss Boston. 我想念波士頓。 CC-BY 2.0 (France) Attribution: tatoeba.org #2387234 (CK) & #5548480 (egg0073)
+I must go now. 我現在必須走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #486448 (CK) & #826159 (Martha)
+I need a taxi. 我需要一輛出租車。 CC-BY 2.0 (France) Attribution: tatoeba.org #5840395 (CK) & #9179888 (xjjAstrus)
+I need advice. 我需要些建议。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245998 (CK) & #7774791 (jiangche)
+I need to try. 我需要尝试。 CC-BY 2.0 (France) Attribution: tatoeba.org #2387771 (CK) & #5983608 (verdastelo9604)
+I respect Tom. 我尊敬湯姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235733 (CK) & #6333802 (verdastelo9604)
+I saw nothing. 我什麼都沒看見。 CC-BY 2.0 (France) Attribution: tatoeba.org #256395 (CK) & #765346 (Martha)
+I should obey. 我應該服從。 CC-BY 2.0 (France) Attribution: tatoeba.org #7830346 (sharris123) & #5500531 (egg0073)
+I think I can. 我想我可以。 CC-BY 2.0 (France) Attribution: tatoeba.org #433759 (CK) & #819370 (Martha)
+I use Firefox. 我使用火狐浏览器。 CC-BY 2.0 (France) Attribution: tatoeba.org #430893 (CK) & #1783888 (sadhen)
+I use Firefox. 我使用火狐。 CC-BY 2.0 (France) Attribution: tatoeba.org #430893 (CK) & #1783889 (sadhen)
+I use Twitter. 我用Twitter。 CC-BY 2.0 (France) Attribution: tatoeba.org #1279106 (donkirkby) & #474921 (egg0073)
+I want a boat. 我想要一艘船。 CC-BY 2.0 (France) Attribution: tatoeba.org #3210440 (chris3spice) & #8696251 (crescat)
+I want a book. 我想要本书。 CC-BY 2.0 (France) Attribution: tatoeba.org #261737 (CK) & #3376538 (go_oo)
+I want to cry. 我想哭。 CC-BY 2.0 (France) Attribution: tatoeba.org #452275 (CM) & #334542 (fucongcong)
+I want to die. 我想死 CC-BY 2.0 (France) Attribution: tatoeba.org #2011280 (CK) & #6388809 (qazz0003)
+I was at home. 我刚才在家。 CC-BY 2.0 (France) Attribution: tatoeba.org #1300804 (CK) & #1394842 (mtdot)
+I was so cold. 我很冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549720 (CK) & #6059538 (verdastelo9604)
+I'll buy this. 我要買這個。 CC-BY 2.0 (France) Attribution: tatoeba.org #434015 (CK) & #832955 (Martha)
+I'll call you. 我会打电话给你。 CC-BY 2.0 (France) Attribution: tatoeba.org #624894 (saeb) & #2163111 (sadhen)
+I'll eat here. 我會在這裡吃飯。 CC-BY 2.0 (France) Attribution: tatoeba.org #449106 (CK) & #819472 (Martha)
+I'm Tom's dad. 我是汤姆的父亲。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235783 (CK) & #9958339 (GlossaMatik)
+I'm Tom's dad. 我是汤姆的爸爸。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235783 (CK) & #9958340 (GlossaMatik)
+I'm a student. 我是學生。 CC-BY 2.0 (France) Attribution: tatoeba.org #567368 (jakov) & #3713544 (egg0073)
+I'm a student. 我是个学生。 CC-BY 2.0 (France) Attribution: tatoeba.org #567368 (jakov) & #7768226 (jiangche)
+I'm a teacher. 我是個老師。 CC-BY 2.0 (France) Attribution: tatoeba.org #256929 (CK) & #926774 (Martha)
+I'm exhausted. 我累死了。 CC-BY 2.0 (France) Attribution: tatoeba.org #20405 (CK) & #333923 (fucongcong)
+I'm exhausted. 困死了。 CC-BY 2.0 (France) Attribution: tatoeba.org #20405 (CK) & #2431733 (fenfang557)
+I'm exhausted. 我很疲惫。 CC-BY 2.0 (France) Attribution: tatoeba.org #20405 (CK) & #10058468 (slo_oth)
+I'm here, too. 我也在这里。 CC-BY 2.0 (France) Attribution: tatoeba.org #4397633 (CK) & #3378127 (GlossaMatik)
+I'm home, Mom! 我回来了,妈! CC-BY 2.0 (France) Attribution: tatoeba.org #40899 (CM) & #10260783 (GlossaMatik)
+I'm impatient. 我是个急性子。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111721 (CK) & #1766126 (sadhen)
+I'm on a diet. 我在節食。 CC-BY 2.0 (France) Attribution: tatoeba.org #241675 (CK) & #793307 (Martha)
+I'm on my way. 我这就上路。 CC-BY 2.0 (France) Attribution: tatoeba.org #707205 (CK) & #707204 (Yashanti)
+I'm so lonely. 我好孤单。 CC-BY 2.0 (France) Attribution: tatoeba.org #3941292 (AlanF_US) & #8517170 (gumblex)
+I'm so stupid. 我真蠢。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248256 (CK) & #3742605 (egg0073)
+I'm still mad. 我还是很气。 CC-BY 2.0 (France) Attribution: tatoeba.org #3393240 (CK) & #9972435 (GlossaMatik)
+I'm unmarried. 我单身。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549703 (CK) & #4977440 (musclegirlxyp)
+I'm unmarried. 我單身。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549703 (CK) & #5691850 (xjjAstrus)
+I'm very busy. 我很忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #433991 (CK) & #819333 (Martha)
+I've got time. 我有时间。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248396 (CK) & #4859550 (musclegirlxyp)
+I've got wine. 我有酒。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248397 (CK) & #5617204 (verdastelo9604)
+Is Tom around? 汤姆在吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244578 (CK) & #8696442 (morningstar)
+Is Tom eating? 汤姆在吃饭吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244598 (CK) & #8696452 (morningstar)
+Is he correct? 他对吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2840611 (CK) & #9953366 (GlossaMatik)
+Is it serious? 严重吗? CC-BY 2.0 (France) Attribution: tatoeba.org #63616 (CK) & #332870 (fucongcong)
+Is that a bat? 那是只蝙蝠吗? CC-BY 2.0 (France) Attribution: tatoeba.org #67124 (CK) & #9970068 (GlossaMatik)
+Is that paper? 那是紙嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #6358544 (CK) & #2660854 (egg0073)
+Is this Tom's? 这是汤姆的吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3507551 (CK) & #4879140 (musclegirlxyp)
+Is this Tom's? 这是汤姆的东西吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3507551 (CK) & #4879141 (musclegirlxyp)
+It is raining. 下雨了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1862 (CK) & #346836 (fucongcong)
+It is raining. 在下雨。 CC-BY 2.0 (France) Attribution: tatoeba.org #1862 (CK) & #409681 (egg0073)
+It looks good. 看起来不错。 CC-BY 2.0 (France) Attribution: tatoeba.org #1808249 (Spamster) & #1808254 (sadhen)
+It might rain. 可能会下雨。 CC-BY 2.0 (France) Attribution: tatoeba.org #1230486 (alec) & #465902 (fucongcong)
+It might rain. 可能要下雨了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1230486 (alec) & #1223755 (tsayng)
+It takes time. 这需要时间。 CC-BY 2.0 (France) Attribution: tatoeba.org #707527 (CK) & #707522 (tianblr)
+It won't work. 它不会奏效。 CC-BY 2.0 (France) Attribution: tatoeba.org #1335281 (CK) & #2780864 (GlossaMatik)
+It's a secret. 它是個秘密。 CC-BY 2.0 (France) Attribution: tatoeba.org #433821 (CK) & #771519 (Martha)
+It's business. 公事公辦。 CC-BY 2.0 (France) Attribution: tatoeba.org #433519 (CK) & #824613 (Martha)
+It's fall now. 现在是秋天。 CC-BY 2.0 (France) Attribution: tatoeba.org #503752 (CM) & #503753 (GlossaMatik)
+It's freezing. 天氣好冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #52011 (CK) & #803735 (Martha)
+It's improved. 它有改善了。 CC-BY 2.0 (France) Attribution: tatoeba.org #435785 (CK) & #771378 (Martha)
+It's my fault. 这是我的错。 CC-BY 2.0 (France) Attribution: tatoeba.org #660437 (CM) & #790573 (GlossaMatik)
+It's my money. 那是我的钱。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249099 (CK) & #8727837 (crescat)
+It's my treat. 我請客。 CC-BY 2.0 (France) Attribution: tatoeba.org #433758 (CK) & #832928 (Martha)
+It's not mine. 不是我的。 CC-BY 2.0 (France) Attribution: tatoeba.org #1894573 (CK) & #5673830 (xjjAstrus)
+It's so early. 太早了。 CC-BY 2.0 (France) Attribution: tatoeba.org #9483437 (CK) & #2007046 (sadhen)
+It's too long. 它太長了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249327 (CK) & #6114449 (verdastelo9604)
+It's too loud. 它太大聲。 CC-BY 2.0 (France) Attribution: tatoeba.org #275485 (CK) & #832797 (Martha)
+It's too soon. 太早了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249336 (CK) & #2007046 (sadhen)
+It's very big. 它很大。 CC-BY 2.0 (France) Attribution: tatoeba.org #450003 (CK) & #832782 (Martha)
+Keep Tom safe. 确保汤姆安全。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235847 (CK) & #5819711 (verdastelo9604)
+Keep it quiet. 保持安静 CC-BY 2.0 (France) Attribution: tatoeba.org #42143 (CK) & #5845311 (start)
+Let me see it. 讓我看看。 CC-BY 2.0 (France) Attribution: tatoeba.org #40019 (CK) & #819468 (Martha)
+Let me try it. 让我试试。 CC-BY 2.0 (France) Attribution: tatoeba.org #43212 (CK) & #333051 (fucongcong)
+Let's go home. 让我们回家吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #773455 (marloncori) & #1506916 (fenfang557)
+Lock the gate. 鎖大門。 CC-BY 2.0 (France) Attribution: tatoeba.org #449045 (CK) & #826099 (Martha)
+Love is blind. 爱情是盲目的。 CC-BY 2.0 (France) Attribution: tatoeba.org #453394 (CM) & #791649 (fucongcong)
+Love is blind. 恋爱使人盲目。 CC-BY 2.0 (France) Attribution: tatoeba.org #453394 (CM) & #1471530 (sadhen)
+Make it quick. 快点。 CC-BY 2.0 (France) Attribution: tatoeba.org #2038397 (Spamster) & #5092239 (mirrorvan)
+Man is mortal. 人固有一死。 CC-BY 2.0 (France) Attribution: tatoeba.org #270072 (Zifre) & #5091165 (mirrorvan)
+May I come in? 我可以進來嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #456355 (lukaszpp) & #780338 (Martha)
+Meet me there. 在那裡見我。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249589 (CK) & #6135006 (verdastelo9604)
+My foot hurts. 我的脚痛。 CC-BY 2.0 (France) Attribution: tatoeba.org #792061 (Swift) & #804866 (fucongcong)
+My head aches. 我头痛。 CC-BY 2.0 (France) Attribution: tatoeba.org #280125 (CK) & #332568 (fucongcong)
+My head hurts. 我头痛。 CC-BY 2.0 (France) Attribution: tatoeba.org #456425 (lukaszpp) & #332568 (fucongcong)
+My neck hurts. 我脖子痛。 CC-BY 2.0 (France) Attribution: tatoeba.org #2471465 (Hybrid) & #4490360 (egg0073)
+My pen is new. 我的钢笔是新的。 CC-BY 2.0 (France) Attribution: tatoeba.org #710914 (CK) & #710912 (Yashanti)
+Never give up. 决不放弃。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249592 (CK) & #3783106 (Debbie_Linder)
+Nothing moved. 什么都没动。 CC-BY 2.0 (France) Attribution: tatoeba.org #8481072 (shekitten) & #10460422 (GlossaMatik)
+Pace yourself. 量力而行。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841178 (CK) & #5092594 (mirrorvan)
+Quit gambling. 戒掉赌博吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1267033 (Scott) & #5092464 (mirrorvan)
+Read this now. 现在读这个。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841179 (CK) & #5945152 (verdastelo9604)
+Save yourself. 拯救你自己。 CC-BY 2.0 (France) Attribution: tatoeba.org #1849367 (CK) & #6325064 (verdastelo9604)
+See you again. 再见! CC-BY 2.0 (France) Attribution: tatoeba.org #32635 (CK) & #336477 (fucongcong)
+See you later. 再见。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841588 (CK) & #2030795 (sadhen)
+Shake my hand. 和我握手。 CC-BY 2.0 (France) Attribution: tatoeba.org #410593 (CK) & #819354 (Martha)
+Shall we walk? 我们该步行吗? CC-BY 2.0 (France) Attribution: tatoeba.org #320508 (CM) & #5574796 (verdastelo9604)
+She felt blue. 她感到闷闷不乐的。 CC-BY 2.0 (France) Attribution: tatoeba.org #317287 (Swift) & #4566371 (liyongtao)
+She hated him. 她恨他。 CC-BY 2.0 (France) Attribution: tatoeba.org #388371 (CK) & #832950 (Martha)
+She is eating. 她吃。 CC-BY 2.0 (France) Attribution: tatoeba.org #527192 (CK) & #4887706 (musclegirlxyp)
+She loves Tom. 她愛湯姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #311828 (CK) & #826241 (Martha)
+She's dieting. 她在节食中。 CC-BY 2.0 (France) Attribution: tatoeba.org #1396194 (CK) & #1878324 (sadhen)
+She's dieting. 她在节食。 CC-BY 2.0 (France) Attribution: tatoeba.org #1396194 (CK) & #7767995 (jiangche)
+She's my type. 她是我的菜。 CC-BY 2.0 (France) Attribution: tatoeba.org #314284 (CK) & #3742628 (egg0073)
+Show it to me. 给我看下它吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1356990 (sacredceltic) & #7771674 (jiangche)
+Shut the door. 不要把门开着。 CC-BY 2.0 (France) Attribution: tatoeba.org #38992 (CK) & #334214 (fucongcong)
+Shut the door. 请关门。 CC-BY 2.0 (France) Attribution: tatoeba.org #38992 (CK) & #396001 (GlossaMatik)
+Shut the door. 关门。 CC-BY 2.0 (France) Attribution: tatoeba.org #38992 (CK) & #472970 (fucongcong)
+Sit beside me. 坐我旁边。 CC-BY 2.0 (France) Attribution: tatoeba.org #250344 (CK) & #1424389 (sadhen)
+Somebody came. 有人来了。 CC-BY 2.0 (France) Attribution: tatoeba.org #5317425 (mailohilohi) & #5092398 (mirrorvan)
+Speak clearly. 講清楚。 CC-BY 2.0 (France) Attribution: tatoeba.org #433849 (CK) & #825154 (Martha)
+Stir the soup. 搅一下汤。 CC-BY 2.0 (France) Attribution: tatoeba.org #704725 (Zifre) & #802843 (fucongcong)
+Stop gambling. 戒掉赌博吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2592874 (WestofEden) & #5092464 (mirrorvan)
+Stop meddling. 别再插手。 CC-BY 2.0 (France) Attribution: tatoeba.org #1719227 (marcelostockle) & #5092534 (mirrorvan)
+Stop shooting. 停止射击。 CC-BY 2.0 (France) Attribution: tatoeba.org #1974716 (CK) & #5092701 (mirrorvan)
+Stop worrying. 别担心了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1495911 (CK) & #8715889 (crescat)
+Straighten up. 改邪归正。 CC-BY 2.0 (France) Attribution: tatoeba.org #282453 (CK) & #5092263 (mirrorvan)
+Stuff happens. 事情难免会发生。 CC-BY 2.0 (France) Attribution: tatoeba.org #491351 (saeb) & #5092383 (mirrorvan)
+Suit yourself. 你隨意。 CC-BY 2.0 (France) Attribution: tatoeba.org #240697 (CM) & #6290249 (xjjAstrus)
+Talk is cheap. 說得簡單。 CC-BY 2.0 (France) Attribution: tatoeba.org #1515606 (Biga) & #884661 (Tajfun)
+Tell me again. 重新告訴我。 CC-BY 2.0 (France) Attribution: tatoeba.org #2250076 (CK) & #6044374 (verdastelo9604)
+Thanks anyway. 还是要说谢谢的。 CC-BY 2.0 (France) Attribution: tatoeba.org #485099 (Scott) & #5092338 (mirrorvan)
+That was fast. 太快了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1280577 (CK) & #8649716 (maxine)
+That's a book. 那是一本書。 CC-BY 2.0 (France) Attribution: tatoeba.org #515535 (CK) & #819414 (Martha)
+That's clever. 好巧妙啊。 CC-BY 2.0 (France) Attribution: tatoeba.org #1357082 (sacredceltic) & #805579 (fucongcong)
+That's insane. 那是瘋狂的。 CC-BY 2.0 (France) Attribution: tatoeba.org #9483418 (CK) & #826184 (Martha)
+That's my aim. 这是我的目的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2256888 (CK) & #9961355 (GlossaMatik)
+That's my cat. 那是我的猫。 CC-BY 2.0 (France) Attribution: tatoeba.org #471758 (CM) & #471765 (GlossaMatik)
+That's my dad. 那个是我爸爸。 CC-BY 2.0 (France) Attribution: tatoeba.org #4397567 (CK) & #10966769 (xjjAstrus)
+That's no lie. 不是謊話。 CC-BY 2.0 (France) Attribution: tatoeba.org #3722408 (CM) & #12002574 (corina)
+The bell rang. 铃响了。 CC-BY 2.0 (France) Attribution: tatoeba.org #385375 (Mouseneb) & #332971 (fucongcong)
+They all knew. 他们都知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #2243022 (CK) & #9972936 (GlossaMatik)
+They are here. 他们在这里。 CC-BY 2.0 (France) Attribution: tatoeba.org #1561368 (ninuzzo) & #3378278 (GlossaMatik)
+They can wait. 他们等得了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2243080 (CK) & #7841358 (basilhan)
+They're armed. 他們有帶武器。 CC-BY 2.0 (France) Attribution: tatoeba.org #1898129 (CK) & #2511467 (tsayng)
+This is a wig. 这是假发。 CC-BY 2.0 (France) Attribution: tatoeba.org #4175760 (Lepotdeterre) & #5637367 (verdastelo9604)
+This is empty. 这是空的。 CC-BY 2.0 (France) Attribution: tatoeba.org #10276530 (DaoSeng) & #9956933 (GlossaMatik)
+This is weird. 奇怪。 CC-BY 2.0 (France) Attribution: tatoeba.org #1898083 (CK) & #917754 (GlossaMatik)
+Throw it away. 扔掉 CC-BY 2.0 (France) Attribution: tatoeba.org #7723590 (Ofthefog) & #5114835 (xjjAstrus)
+Time is money. 时间就是金钱。 CC-BY 2.0 (France) Attribution: tatoeba.org #566026 (CK) & #4970148 (wzhd)
+Today was fun. 今天很有趣。 CC-BY 2.0 (France) Attribution: tatoeba.org #418628 (CK) & #826120 (Martha)
+Tom applauded. 湯姆拍了手。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203595 (CK) & #5812342 (xjjAstrus)
+Tom applauded. 汤姆鼓掌。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203595 (CK) & #9956343 (GlossaMatik)
+Tom came back. 湯姆回來了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236132 (CK) & #6936200 (verdastelo9604)
+Tom didn't go. 汤姆没走。 CC-BY 2.0 (France) Attribution: tatoeba.org #3735263 (CK) & #5581802 (verdastelo9604)
+Tom fell down. 湯姆摔倒了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1094129 (CK) & #8215735 (verdastelo9604)
+Tom felt cold. 湯姆覺得冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #1025797 (CK) & #5685768 (xjjAstrus)
+Tom got tired. 湯姆累了。 CC-BY 2.0 (France) Attribution: tatoeba.org #6220041 (CK) & #6098473 (verdastelo9604)
+Tom graduated. 湯姆畢業了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111170 (CK) & #8215705 (verdastelo9604)
+Tom is a hick. 汤姆是个乡巴佬。 CC-BY 2.0 (France) Attribution: tatoeba.org #2272811 (CK) & #5574810 (verdastelo9604)
+Tom is absent. 湯姆缺席。 CC-BY 2.0 (France) Attribution: tatoeba.org #37162 (CK) & #826133 (Martha)
+Tom is boring. 汤姆是个无聊的人。 CC-BY 2.0 (France) Attribution: tatoeba.org #2202622 (CK) & #2440969 (fenfang557)
+Tom is lonely. 汤姆很孤独。 CC-BY 2.0 (France) Attribution: tatoeba.org #5854381 (CK) & #7781773 (jiangche)
+Tom is so hot. 汤姆非常性感。 CC-BY 2.0 (France) Attribution: tatoeba.org #2273497 (CK) & #4621026 (Yashanti)
+Tom is stingy. 汤姆很小气。 CC-BY 2.0 (France) Attribution: tatoeba.org #1093435 (CK) & #4264932 (notabene)
+Tom is thirty. 汤姆今年三十岁。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236878 (CK) & #8738755 (crescat)
+Tom isn't old. 湯姆不老。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236999 (CK) & #6150025 (verdastelo9604)
+Tom knows him. 湯姆認識他。 CC-BY 2.0 (France) Attribution: tatoeba.org #2237129 (CK) & #6447545 (verdastelo9604)
+Tom loves you. 汤姆爱你。 CC-BY 2.0 (France) Attribution: tatoeba.org #2257541 (CK) & #5585235 (verdastelo9604)
+Tom missed it. 汤姆错过了它。 CC-BY 2.0 (France) Attribution: tatoeba.org #4394832 (CK) & #9961268 (GlossaMatik)
+Tom overslept. 汤姆睡过头了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1164341 (CK) & #5092449 (mirrorvan)
+Tom runs fast. 汤姆跑得快。 CC-BY 2.0 (France) Attribution: tatoeba.org #3171216 (CK) & #5072385 (musclegirlxyp)
+Tom was drunk. 汤姆醉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2239777 (CK) & #5142201 (musclegirlxyp)
+Tom was fired. 湯姆被解僱了。 CC-BY 2.0 (France) Attribution: tatoeba.org #513527 (CK) & #825757 (Martha)
+Tom was tired. 湯姆累了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2471870 (arnxy20) & #6098473 (verdastelo9604)
+Tom was wrong. 汤姆错了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1140912 (CK) & #8463695 (gumblex)
+Tom's married. 汤姆已经结婚了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107566 (CK) & #9961309 (GlossaMatik)
+Wait a moment. 請稍等。 CC-BY 2.0 (France) Attribution: tatoeba.org #410597 (CK) & #825160 (Martha)
+Wait a moment. 等一下。 CC-BY 2.0 (France) Attribution: tatoeba.org #410597 (CK) & #9007563 (jacintoo)
+We both cried. 我们都哭了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241031 (CK) & #10260788 (GlossaMatik)
+We have to go. 我们必须走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1737475 (Spamster) & #7767666 (jiangche)
+We kept quiet. 我们保持了沉默。 CC-BY 2.0 (France) Attribution: tatoeba.org #248957 (CK) & #334263 (fucongcong)
+We like music. 我們喜歡音樂。 CC-BY 2.0 (France) Attribution: tatoeba.org #247741 (CK) & #6093304 (verdastelo9604)
+We missed you. 我們想你。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241163 (CK) & #6624605 (verdastelo9604)
+We need money. 我們需要錢。 CC-BY 2.0 (France) Attribution: tatoeba.org #493908 (adjusting) & #752112 (Martha)
+We need to go. 我们必须走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1893749 (CK) & #7767666 (jiangche)
+We understand. 我们明白。 CC-BY 2.0 (France) Attribution: tatoeba.org #1893706 (CK) & #5102318 (mirrorvan)
+We want candy. 我們想要糖。 CC-BY 2.0 (France) Attribution: tatoeba.org #2011284 (CK) & #6111716 (verdastelo9604)
+We were bored. 我们感到厌烦了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241480 (CK) & #7767668 (jiangche)
+We'll be busy. 我們會很忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #2649180 (CK) & #6131309 (verdastelo9604)
+We'll do that. 我們會去做。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241572 (CK) & #6091802 (verdastelo9604)
+We're friends. 我们是朋友。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107346 (CK) & #5624940 (verdastelo9604)
+We're friends. 我們是朋友。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107346 (CK) & #6149234 (xjjAstrus)
+We're special. 我们是特别的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203388 (CK) & #7767571 (jiangche)
+We're special. 我们很特别。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203388 (CK) & #7767572 (jiangche)
+We're worried. 我们很担心。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203589 (CK) & #7704613 (leafjensen)
+We've arrived. 我們已經到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #410594 (CK) & #825155 (Martha)
+Were you busy? 您当时在忙吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2649178 (CK) & #7768293 (jiangche)
+Where are you? 你在哪儿? CC-BY 2.0 (France) Attribution: tatoeba.org #2168 (CK) & #346124 (fucongcong)
+Who hired you? 誰僱了你? CC-BY 2.0 (France) Attribution: tatoeba.org #1663022 (Spamster) & #8215698 (verdastelo9604)
+Who loved who? 谁爱谁? CC-BY 2.0 (France) Attribution: tatoeba.org #2254860 (CK) & #9958609 (GlossaMatik)
+Whose is this? 这是谁的? CC-BY 2.0 (France) Attribution: tatoeba.org #2302 (CK) & #1314463 (vicch)
+Why blame Tom? 为什么责备汤姆? CC-BY 2.0 (France) Attribution: tatoeba.org #2057760 (CK) & #2394590 (fenfang557)
+You are drunk! 你喝醉了! CC-BY 2.0 (France) Attribution: tatoeba.org #64332 (CK) & #7768302 (jiangche)
+You are lying. 你在撒谎。 CC-BY 2.0 (France) Attribution: tatoeba.org #26653 (CK) & #332572 (fucongcong)
+You could run. 你能跑。 CC-BY 2.0 (France) Attribution: tatoeba.org #2254961 (CK) & #6333813 (verdastelo9604)
+You don't say. 真的? CC-BY 2.0 (France) Attribution: tatoeba.org #28233 (CK) & #1397360 (mtdot)
+You look good. 你气色不错。 CC-BY 2.0 (France) Attribution: tatoeba.org #1011281 (DanaDescalza) & #2040311 (sadhen)
+You look pale. 你看起來很蒼白。 CC-BY 2.0 (France) Attribution: tatoeba.org #16224 (CK) & #771525 (Martha)
+You should go. 你應該去。 CC-BY 2.0 (France) Attribution: tatoeba.org #518556 (CK) & #832786 (Martha)
+You should go. 你最好去。 CC-BY 2.0 (France) Attribution: tatoeba.org #518556 (CK) & #844117 (fucongcong)
+You will fail. 你會失敗。 CC-BY 2.0 (France) Attribution: tatoeba.org #694388 (AmberShadow) & #781665 (Martha)
+You work hard. 你工作努力。 CC-BY 2.0 (France) Attribution: tatoeba.org #15993 (CK) & #1992630 (sadhen)
+You're joking! 你在開玩笑吧! CC-BY 2.0 (France) Attribution: tatoeba.org #433882 (CK) & #825144 (Martha)
+You're not me. 你不是我。 CC-BY 2.0 (France) Attribution: tatoeba.org #2218273 (CK) & #5341690 (xjjAstrus)
+You're so bad. 你真壞。 CC-BY 2.0 (France) Attribution: tatoeba.org #1230472 (alec) & #1225678 (tsayng)
+You're stupid. 你很愚蠢。 CC-BY 2.0 (France) Attribution: tatoeba.org #2123495 (CK) & #993698 (leoyzy)
+You're stupid. 你二了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2123495 (CK) & #1750497 (sadhen)
+Zip your lips. 闭上你的嘴。 CC-BY 2.0 (France) Attribution: tatoeba.org #8557825 (CM) & #1691765 (sadhen)
+A bird can fly. 鸟会飞。 CC-BY 2.0 (France) Attribution: tatoeba.org #812362 (Zaphod) & #2999597 (sadhen)
+Allow me to go. 請允許我去。 CC-BY 2.0 (France) Attribution: tatoeba.org #433651 (CK) & #826174 (Martha)
+Are you afraid? 你害怕吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1485265 (arnxy20) & #9990081 (GlossaMatik)
+Are you coming? 你会来吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1417464 (CK) & #4970134 (wzhd)
+Are you crying? 你在哭嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1886352 (CK) & #3718942 (egg0073)
+Are you hungry? 你肚子饿吗? CC-BY 2.0 (France) Attribution: tatoeba.org #434242 (lukaszpp) & #400025 (GlossaMatik)
+Are you single? 你是单身吗? CC-BY 2.0 (France) Attribution: tatoeba.org #280576 (CK) & #4956716 (musclegirlxyp)
+Aren't you Tom? 你不是湯姆嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #37392 (CK) & #727800 (Martha)
+Aren't you Tom? 你不是湯姆嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #37392 (CK) & #825908 (Martha)
+Aren't you hot? 你不热吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2951539 (CK) & #4956714 (musclegirlxyp)
+Birds lay eggs. 鳥下蛋。 CC-BY 2.0 (France) Attribution: tatoeba.org #278220 (CK) & #826163 (Martha)
+Boil the water. 把水燒開。 CC-BY 2.0 (France) Attribution: tatoeba.org #1795949 (ifethereal) & #896660 (Martha)
+Bring Tom here. 把汤姆带到这里来。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235648 (CK) & #8737070 (crescat)
+Bring it to me. 把它带给我。 CC-BY 2.0 (France) Attribution: tatoeba.org #41817 (CK) & #745903 (fucongcong)
+Buy Tom a beer. 给汤姆买一瓶啤酒。 CC-BY 2.0 (France) Attribution: tatoeba.org #8054569 (CK) & #8631023 (ZeroAurora)
+Buy me a snack. 帮我买点零食吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #5320767 (mailohilohi) & #9838191 (morningstar)
+Can I eat this? 我可以吃这个吗? CC-BY 2.0 (France) Attribution: tatoeba.org #54937 (CK) & #411609 (fucongcong)
+Can I help you? 我能幫你嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #25095 (CK) & #6559076 (xjjAstrus)
+Can I see that? 我能看看那个吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1886275 (CK) & #8749676 (crescat)
+Can I sit here? 我能坐这里吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1537275 (niceguydave) & #4757682 (ryanwoo)
+Can we make it? 我們做得到嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2890988 (CK) & #9545095 (verdastelo9604)
+Can you get up? 你能起床嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1117779 (Scott) & #6057671 (xjjAstrus)
+Clean the room. 打掃房間。 CC-BY 2.0 (France) Attribution: tatoeba.org #378284 (CK) & #860817 (Martha)
+Close the door. 关门。 CC-BY 2.0 (France) Attribution: tatoeba.org #405379 (brauliobezerra) & #472970 (fucongcong)
+Close the gate. 关门。 CC-BY 2.0 (France) Attribution: tatoeba.org #853133 (piksea) & #472970 (fucongcong)
+Coffee, please. 我要咖啡,谢谢。 CC-BY 2.0 (France) Attribution: tatoeba.org #1907148 (CK) & #5092616 (mirrorvan)
+Come down here! 你给我下来! CC-BY 2.0 (France) Attribution: tatoeba.org #1934782 (Spamster) & #1766123 (sadhen)
+Cows give milk. 牛可产奶。 CC-BY 2.0 (France) Attribution: tatoeba.org #619902 (darinmex) & #7767652 (jiangche)
+Deal with them. 解决他们。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245254 (CK) & #5091689 (mirrorvan)
+Did you see it? 您看见它了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #914018 (Jane_Austen) & #10182763 (slo_oth)
+Do I look rich? 我看起来很有钱吗? CC-BY 2.0 (France) Attribution: tatoeba.org #10317912 (CK) & #10635237 (gumblex)
+Do as you like. 你想怎么做就怎么做。 CC-BY 2.0 (France) Attribution: tatoeba.org #17188 (CK) & #398887 (GlossaMatik)
+Do as you want. 你想怎么做就怎么做。 CC-BY 2.0 (France) Attribution: tatoeba.org #2369 (Eldad) & #398887 (GlossaMatik)
+Do we know you? 我们认识你么? CC-BY 2.0 (France) Attribution: tatoeba.org #1886115 (CK) & #2065024 (sadhen)
+Do you hate me? 你讨厌我吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3189152 (CK) & #4885096 (musclegirlxyp)
+Do you have it? 你们有吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2192241 (acbarbosa) & #6850351 (mao)
+Do you hear me? 你听得见吗? CC-BY 2.0 (France) Attribution: tatoeba.org #319989 (CK) & #333415 (fucongcong)
+Do you know me? 你认识我吗? CC-BY 2.0 (France) Attribution: tatoeba.org #69295 (CK) & #1790035 (sadhen)
+Do you know me? 你还认识我吗? CC-BY 2.0 (France) Attribution: tatoeba.org #69295 (CK) & #4835855 (sadhen)
+Do you know me? 你認識我嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #69295 (CK) & #5816150 (xjjAstrus)
+Do you like it? 你喜欢吗 ? CC-BY 2.0 (France) Attribution: tatoeba.org #433500 (CK) & #423413 (fucongcong)
+Do you like it? 你喜歡嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #433500 (CK) & #825921 (Martha)
+Do you love me? 你爱我吗? CC-BY 2.0 (France) Attribution: tatoeba.org #321497 (CK) & #10966779 (xjjAstrus)
+Do you miss me? 你想我了? CC-BY 2.0 (France) Attribution: tatoeba.org #1230779 (alec) & #334429 (fucongcong)
+Do you miss me? 你想我吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1230779 (alec) & #4835859 (sadhen)
+Do you promise? 你保證嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1886067 (CK) & #5865504 (verdastelo9604)
+Don't eat that! 不要吃那個! CC-BY 2.0 (France) Attribution: tatoeba.org #6029093 (Huskion) & #6835388 (User76378)
+Don't touch it. 別碰它。 CC-BY 2.0 (France) Attribution: tatoeba.org #433652 (CK) & #819332 (Martha)
+Drop the knife! 把刀放下! CC-BY 2.0 (France) Attribution: tatoeba.org #2245412 (CK) & #9135872 (xjjAstrus)
+Everybody lies. 每个人都会说谎。 CC-BY 2.0 (France) Attribution: tatoeba.org #1008564 (Goracykabanos) & #5092416 (mirrorvan)
+French is easy. 法语很简单。 CC-BY 2.0 (France) Attribution: tatoeba.org #8410245 (CK) & #10156955 (yeyue)
+Get in the car. 上车吧! CC-BY 2.0 (France) Attribution: tatoeba.org #1839425 (CK) & #7768011 (jiangche)
+Get out of bed! 起床! CC-BY 2.0 (France) Attribution: tatoeba.org #33985 (CK) & #771485 (Martha)
+Get rid of her. 把她干掉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1849374 (CK) & #9961721 (GlossaMatik)
+Give me a kiss. 吻我。 CC-BY 2.0 (France) Attribution: tatoeba.org #1844204 (CK) & #5092385 (mirrorvan)
+Good afternoon. 下午好。 CC-BY 2.0 (France) Attribution: tatoeba.org #499689 (CK) & #812493 (fucongcong)
+Happy New Year! 新年快樂! CC-BY 2.0 (France) Attribution: tatoeba.org #361350 (blay_paul) & #6581625 (SofiaLee)
+Happy New Year! 元旦快樂! CC-BY 2.0 (France) Attribution: tatoeba.org #361350 (blay_paul) & #6583810 (xjjAstrus)
+Have some more. 你該多吃點。 CC-BY 2.0 (France) Attribution: tatoeba.org #4755386 (garborg) & #4754672 (egg0073)
+He accelerated. 他提速了。 CC-BY 2.0 (France) Attribution: tatoeba.org #290321 (CM) & #5092269 (mirrorvan)
+He confused us. 他把我們弄糊塗了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2166227 (faraway9911) & #2112340 (egg0073)
+He doesn't lie. 他不说谎。 CC-BY 2.0 (France) Attribution: tatoeba.org #1173825 (CK) & #5865517 (verdastelo9604)
+He doesn't tan. 他晒不黑。 CC-BY 2.0 (France) Attribution: tatoeba.org #454617 (FeuDRenais) & #454618 (GlossaMatik)
+He gave a ball. 他举办了一场舞会。 CC-BY 2.0 (France) Attribution: tatoeba.org #303384 (CM) & #2143987 (ydcok)
+He held a ball. 他举办了一场舞会。 CC-BY 2.0 (France) Attribution: tatoeba.org #2162155 (FeuDRenais) & #2143987 (ydcok)
+He is a doctor. 他是医生来的。 CC-BY 2.0 (France) Attribution: tatoeba.org #293611 (CK) & #8593079 (easononizuka)
+He lives alone. 他一个人生活。 CC-BY 2.0 (France) Attribution: tatoeba.org #811376 (willhite2) & #346797 (fucongcong)
+He lives alone. 他独自生活。 CC-BY 2.0 (France) Attribution: tatoeba.org #811376 (willhite2) & #812227 (fucongcong)
+He looks happy. 他看上去很幸福。 CC-BY 2.0 (France) Attribution: tatoeba.org #1460417 (piksea) & #8715867 (crescat)
+He looks young. 他看起来很年轻。 CC-BY 2.0 (France) Attribution: tatoeba.org #299157 (CK) & #2188410 (sadhen)
+He lost a book. 他弄丟了一本書。 CC-BY 2.0 (France) Attribution: tatoeba.org #1275203 (CM) & #1275211 (egg0073)
+He loves music. 他非常喜歡音樂。 CC-BY 2.0 (France) Attribution: tatoeba.org #1316125 (CK) & #833780 (Martha)
+He sang a song. 他唱了一首歌。 CC-BY 2.0 (France) Attribution: tatoeba.org #283456 (CK) & #427999 (fucongcong)
+He was drowned. 他被淹死了。 CC-BY 2.0 (France) Attribution: tatoeba.org #874946 (CM) & #1767972 (sadhen)
+He's a big boy. 他是個大男孩。 CC-BY 2.0 (France) Attribution: tatoeba.org #288238 (CK) & #824647 (Martha)
+He's an author. 他是作家。 CC-BY 2.0 (France) Attribution: tatoeba.org #593248 (CK) & #4970153 (wzhd)
+He's henpecked. 他對老婆言聽計從。 CC-BY 2.0 (France) Attribution: tatoeba.org #1493814 (niceguydave) & #775891 (Martha)
+Here is a book. 這裡有一本書。 CC-BY 2.0 (France) Attribution: tatoeba.org #61725 (CK) & #825137 (Martha)
+How much is it? 它多貴? CC-BY 2.0 (France) Attribution: tatoeba.org #2418 (brauliobezerra) & #759540 (Martha)
+How much is it? 多少錢? CC-BY 2.0 (France) Attribution: tatoeba.org #2418 (brauliobezerra) & #761442 (Martha)
+How much is it? 这个几块? CC-BY 2.0 (France) Attribution: tatoeba.org #2418 (brauliobezerra) & #10052320 (GlossaMatik)
+How time flies! 时间过得多快呀。 CC-BY 2.0 (France) Attribution: tatoeba.org #240401 (CM) & #9484585 (jin1)
+How time flies! 时间过得真快啊! CC-BY 2.0 (France) Attribution: tatoeba.org #240401 (CM) & #9987087 (GlossaMatik)
+How's business? 生意怎么样? CC-BY 2.0 (France) Attribution: tatoeba.org #267432 (CK) & #431126 (GlossaMatik)
+How's everyone? 大家好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #9709254 (megamanenm) & #819309 (Martha)
+How's it going? 你們好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #277972 (CK) & #1761553 (egg0073)
+I am a shy boy. 我是一個害羞的男孩。 CC-BY 2.0 (France) Attribution: tatoeba.org #97592 (fcbond) & #781497 (Martha)
+I am a student. 我是學生。 CC-BY 2.0 (France) Attribution: tatoeba.org #252287 (CK) & #3713544 (egg0073)
+I am a student. 我是个学生。 CC-BY 2.0 (France) Attribution: tatoeba.org #252287 (CK) & #7768226 (jiangche)
+I am a teacher. 我是個老師。 CC-BY 2.0 (France) Attribution: tatoeba.org #259069 (CK) & #926774 (Martha)
+I am not happy. 我不高兴。 CC-BY 2.0 (France) Attribution: tatoeba.org #3378134 (CM) & #3378133 (GlossaMatik)
+I am off today. 我今天休息。 CC-BY 2.0 (France) Attribution: tatoeba.org #242826 (CK) & #1990181 (sunnywqing)
+I am too short. 我太矮了。 CC-BY 2.0 (France) Attribution: tatoeba.org #436445 (lukaszpp) & #512866 (fucongcong)
+I ate an apple. 我吃了一個蘋果。 CC-BY 2.0 (France) Attribution: tatoeba.org #3294474 (CK) & #6057138 (xjjAstrus)
+I ate the meat. 我吃肉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2629267 (CK) & #2629582 (GlossaMatik)
+I believed you. 我信过你。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841709 (CK) & #4789627 (400S)
+I believed you. 我相信了你。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841709 (CK) & #7704610 (leafjensen)
+I borrow money. 我借錢。 CC-BY 2.0 (France) Attribution: tatoeba.org #435437 (CK) & #825878 (Martha)
+I broke my arm. 我的手臂斷了。 CC-BY 2.0 (France) Attribution: tatoeba.org #262315 (CK) & #919738 (Martha)
+I can hear you. 我听得到。 CC-BY 2.0 (France) Attribution: tatoeba.org #2301250 (CK) & #8727966 (crescat)
+I dislike eggs. 我不喜欢鸡蛋。 CC-BY 2.0 (France) Attribution: tatoeba.org #593244 (CK) & #4673809 (McMeao)
+I don't get it. 我不懂。 CC-BY 2.0 (France) Attribution: tatoeba.org #38392 (CK) & #409679 (egg0073)
+I go to school. 我去学校。 CC-BY 2.0 (France) Attribution: tatoeba.org #472089 (tamsanh) & #4878932 (musclegirlxyp)
+I got arrested. 我被逮捕了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245783 (CK) & #3718963 (egg0073)
+I got up early. 我起床早。 CC-BY 2.0 (France) Attribution: tatoeba.org #259164 (CK) & #5555832 (verdastelo9604)
+I had a vision. 我有一个设想。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887332 (CK) & #5091184 (mirrorvan)
+I had a vision. 我有一个愿景。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887332 (CK) & #5091185 (mirrorvan)
+I hate Mondays. 我讨厌星期一。 CC-BY 2.0 (France) Attribution: tatoeba.org #576084 (CK) & #1417551 (sadhen)
+I have a couch. 我有一個沙發。 CC-BY 2.0 (France) Attribution: tatoeba.org #8297812 (GuidoW) & #9139559 (xjjAstrus)
+I have a cough. 我咳嗽。 CC-BY 2.0 (France) Attribution: tatoeba.org #51340 (CK) & #826092 (Martha)
+I have a dream. 我有一个梦想。 CC-BY 2.0 (France) Attribution: tatoeba.org #1630 (al_ex_an_der) & #501456 (fucongcong)
+I have hiccups. 我打嗝了。 CC-BY 2.0 (France) Attribution: tatoeba.org #796086 (U2FS) & #796643 (fucongcong)
+I have no clue. 我一无所知。 CC-BY 2.0 (France) Attribution: tatoeba.org #2563243 (CK) & #7772071 (jiangche)
+I have no idea. 我一无所知。 CC-BY 2.0 (France) Attribution: tatoeba.org #273786 (CK) & #7772071 (jiangche)
+I have no time. 我没时间。 CC-BY 2.0 (France) Attribution: tatoeba.org #249910 (CK) & #782929 (fucongcong)
+I have to help. 我必须帮忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #2360532 (CK) & #9958568 (GlossaMatik)
+I hiccup a lot. 我经常打嗝。 CC-BY 2.0 (France) Attribution: tatoeba.org #53088 (CK) & #796644 (fucongcong)
+I just saw Tom. 我刚刚见到汤姆了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2261956 (CK) & #8776012 (crescat)
+I kept singing. 我繼續唱歌。 CC-BY 2.0 (France) Attribution: tatoeba.org #5852006 (CK) & #819338 (Martha)
+I kept singing. 我继续唱歌。 CC-BY 2.0 (France) Attribution: tatoeba.org #5852006 (CK) & #4270138 (notabene)
+I like drawing. 我喜欢画画。 CC-BY 2.0 (France) Attribution: tatoeba.org #7802995 (sharris123) & #1884732 (Venki)
+I like flowers. 我喜歡花。 CC-BY 2.0 (France) Attribution: tatoeba.org #4563343 (robbieheslop) & #4504367 (egg0073)
+I like jogging. 我喜欢跑步。 CC-BY 2.0 (France) Attribution: tatoeba.org #640717 (shanghainese) & #363979 (fucongcong)
+I like rabbits. 我喜欢兔子。 CC-BY 2.0 (France) Attribution: tatoeba.org #12259779 (sundown) & #7774808 (jiangche)
+I like reading. 我喜欢阅读。 CC-BY 2.0 (France) Attribution: tatoeba.org #1276130 (CK) & #2163112 (sadhen)
+I like running. 我喜欢跑步。 CC-BY 2.0 (France) Attribution: tatoeba.org #1444911 (CK) & #363979 (fucongcong)
+I like to read. 我喜欢阅读。 CC-BY 2.0 (France) Attribution: tatoeba.org #2164515 (CM) & #2163112 (sadhen)
+I love my life. 我爱我的生活。 CC-BY 2.0 (France) Attribution: tatoeba.org #436789 (lukaszpp) & #465838 (fucongcong)
+I love my life. 我爱我的生命。 CC-BY 2.0 (France) Attribution: tatoeba.org #436789 (lukaszpp) & #465839 (fucongcong)
+I love my wife. 我爱我的妻子。 CC-BY 2.0 (France) Attribution: tatoeba.org #436791 (lukaszpp) & #4759974 (ryanwoo)
+I love parties. 我愛派對。 CC-BY 2.0 (France) Attribution: tatoeba.org #435747 (CK) & #826027 (Martha)
+I met a friend. 我遇见一个朋友。 CC-BY 2.0 (France) Attribution: tatoeba.org #262062 (mamat) & #1428115 (sadhen)
+I missed a lot. 我错过了很多。 CC-BY 2.0 (France) Attribution: tatoeba.org #3822929 (CK) & #9961275 (GlossaMatik)
+I must decline. 我必须拒绝。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245986 (CK) & #5091270 (mirrorvan)
+I must go home. 我该回家了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2768606 (CK) & #343852 (fucongcong)
+I need a knife. 我需要一把刀。 CC-BY 2.0 (France) Attribution: tatoeba.org #693874 (Riskemulo) & #9135871 (xjjAstrus)
+I need a raise. 我需要加薪。 CC-BY 2.0 (France) Attribution: tatoeba.org #2387462 (CK) & #8792052 (slo_oth)
+I need a stamp. 我需要一張郵票。 CC-BY 2.0 (France) Attribution: tatoeba.org #735080 (Darkmaster) & #793499 (Martha)
+I need a towel. 我需要一塊毛巾。 CC-BY 2.0 (France) Attribution: tatoeba.org #2387469 (CK) & #9049735 (xjjAstrus)
+I need it ASAP. 我尽快需要。 CC-BY 2.0 (France) Attribution: tatoeba.org #275708 (CK) & #333429 (fucongcong)
+I need my coat. 我需要我的大衣。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887576 (CK) & #5496299 (egg0073)
+I need to know. 我需要知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #2246738 (Hybrid) & #5911609 (verdastelo9604)
+I often hiccup. 我经常打嗝。 CC-BY 2.0 (France) Attribution: tatoeba.org #1014156 (Albert) & #796644 (fucongcong)
+I remember now. 现在我想起来了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1474622 (Chrikaru) & #472898 (fucongcong)
+I said shut up! 我说过了,闭嘴! CC-BY 2.0 (France) Attribution: tatoeba.org #1453550 (Spamster) & #2499996 (fenfang557)
+I saw five men. 我看到了五個男人。 CC-BY 2.0 (France) Attribution: tatoeba.org #370730 (saeb) & #884221 (Martha)
+I saw five men. 我看见五个男人。 CC-BY 2.0 (France) Attribution: tatoeba.org #370730 (saeb) & #1372536 (sadhen)
+I saw her swim. 我看見她游泳。 CC-BY 2.0 (France) Attribution: tatoeba.org #261029 (CK) & #8388686 (wangchou)
+I sell flowers. 我卖花。 CC-BY 2.0 (France) Attribution: tatoeba.org #3378102 (_undertoad) & #3378101 (GlossaMatik)
+I should do it. 我应该去做。 CC-BY 2.0 (France) Attribution: tatoeba.org #5366319 (CK) & #5911768 (verdastelo9604)
+I study Korean. 我学韩语。 CC-BY 2.0 (France) Attribution: tatoeba.org #472091 (tamsanh) & #476227 (fucongcong)
+I turned right. 我往右拐了。 CC-BY 2.0 (France) Attribution: tatoeba.org #258392 (CK) & #406244 (GlossaMatik)
+I want the fan. 我要那個電風扇。 CC-BY 2.0 (France) Attribution: tatoeba.org #273343 (CK) & #5246179 (xjjAstrus)
+I want to play. 我想去玩。 CC-BY 2.0 (France) Attribution: tatoeba.org #2011294 (CK) & #8715885 (crescat)
+I want to stay. 我想要留下。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887895 (CK) & #9178046 (xiaohong)
+I was a doctor. 我以前是醫生。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549661 (CK) & #6293088 (verdastelo9604)
+I was learning. 我在學習。 CC-BY 2.0 (France) Attribution: tatoeba.org #2200277 (CM) & #6094816 (verdastelo9604)
+I was mistaken. 我想错了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247494 (CK) & #2367643 (GlossaMatik)
+I was to blame. 这是我的错。 CC-BY 2.0 (France) Attribution: tatoeba.org #3374200 (CK) & #790573 (GlossaMatik)
+I wasn't drunk. 我沒醉。 CC-BY 2.0 (France) Attribution: tatoeba.org #1133995 (CK) & #8215707 (verdastelo9604)
+I will sue you. 我要控告你。 CC-BY 2.0 (France) Attribution: tatoeba.org #64269 (xtofu80) & #793531 (Martha)
+I'd like to go. 我想要去。 CC-BY 2.0 (France) Attribution: tatoeba.org #241063 (CK) & #832461 (Martha)
+I'll alert Tom. 我会警告汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235745 (CK) & #5903479 (verdastelo9604)
+I'll come back. 我要回来了。 CC-BY 2.0 (France) Attribution: tatoeba.org #261982 (CK) & #398080 (GlossaMatik)
+I'll come back. 我会回来的。 CC-BY 2.0 (France) Attribution: tatoeba.org #261982 (CK) & #512881 (fucongcong)
+I'll scold him. 我會責備他。 CC-BY 2.0 (France) Attribution: tatoeba.org #403371 (CK) & #824638 (Martha)
+I'll see to it. 我會留意的。 CC-BY 2.0 (France) Attribution: tatoeba.org #321354 (CK) & #771457 (Martha)
+I'll see to it. 由我来做. CC-BY 2.0 (France) Attribution: tatoeba.org #321354 (CK) & #1423490 (asosan)
+I'll stay home. 我會待在家裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #321732 (CK) & #819453 (Martha)
+I'll treat you. 我請你。 CC-BY 2.0 (France) Attribution: tatoeba.org #17568 (CK) & #771474 (Martha)
+I'm a bachelor. 我单身。 CC-BY 2.0 (France) Attribution: tatoeba.org #2713780 (CK) & #4977440 (musclegirlxyp)
+I'm a bachelor. 我單身。 CC-BY 2.0 (France) Attribution: tatoeba.org #2713780 (CK) & #5691850 (xjjAstrus)
+I'm a free man. 我是一個自由的人。 CC-BY 2.0 (France) Attribution: tatoeba.org #25504 (CK) & #793247 (Martha)
+I'm a good guy. 我是一个好人。 CC-BY 2.0 (France) Attribution: tatoeba.org #1225236 (CK) & #1786008 (sadhen)
+I'm a nice guy. 我是一个好人。 CC-BY 2.0 (France) Attribution: tatoeba.org #838729 (Scott) & #1786008 (sadhen)
+I'm afraid not. 恐怕不行。 CC-BY 2.0 (France) Attribution: tatoeba.org #20899 (CK) & #429322 (GlossaMatik)
+I'm all for it. 我百分之百赞成。 CC-BY 2.0 (France) Attribution: tatoeba.org #275702 (CM) & #478144 (GlossaMatik)
+I'm an atheist. 我是无神论者。 CC-BY 2.0 (France) Attribution: tatoeba.org #379739 (CM) & #7771867 (jiangche)
+I'm behind him. 我在他後面。 CC-BY 2.0 (France) Attribution: tatoeba.org #403370 (CK) & #825930 (Martha)
+I'm busy today. 我今天忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #2713779 (CK) & #8215733 (verdastelo9604)
+I'm called Tom. 我叫Tom。 CC-BY 2.0 (France) Attribution: tatoeba.org #6645799 (CK) & #1850476 (egg0073)
+I'm called Tom. 我叫湯姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #6645799 (CK) & #6292456 (xjjAstrus)
+I'm dead tired. 我累死了。 CC-BY 2.0 (France) Attribution: tatoeba.org #501385 (CK) & #333923 (fucongcong)
+I'm dead tired. 困死了。 CC-BY 2.0 (France) Attribution: tatoeba.org #501385 (CK) & #2431733 (fenfang557)
+I'm free today. 我今天有空。 CC-BY 2.0 (France) Attribution: tatoeba.org #257587 (CK) & #333310 (fucongcong)
+I'm no quitter. 我不輕易放棄。 CC-BY 2.0 (France) Attribution: tatoeba.org #258684 (CK) & #8215727 (verdastelo9604)
+I'm not famous. 我没名气。 CC-BY 2.0 (France) Attribution: tatoeba.org #3330530 (CK) & #7781730 (jiangche)
+I'm not famous. 我不出名。 CC-BY 2.0 (France) Attribution: tatoeba.org #3330530 (CK) & #7781731 (jiangche)
+I'm not greedy. 我不貪婪。 CC-BY 2.0 (France) Attribution: tatoeba.org #3267389 (Ricardo14) & #6333811 (verdastelo9604)
+I'm not guilty. 我没有罪。 CC-BY 2.0 (France) Attribution: tatoeba.org #1563108 (CK) & #1772685 (sadhen)
+I'm not stupid. 我不是笨蛋。 CC-BY 2.0 (France) Attribution: tatoeba.org #1108790 (CK) & #8698960 (crescat)
+I'm so excited. 我很激动。 CC-BY 2.0 (France) Attribution: tatoeba.org #953850 (CK) & #5978316 (verdastelo9604)
+I'm thirty now. 我现在30岁了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2765317 (CK) & #335364 (fucongcong)
+I'm undressing. 我脱衣服。 CC-BY 2.0 (France) Attribution: tatoeba.org #1765 (Swift) & #502695 (fucongcong)
+I'm vegetarian. 我是素食主义者。 CC-BY 2.0 (France) Attribution: tatoeba.org #2111671 (CK) & #510809 (fucongcong)
+I'm very happy. 我很快樂。 CC-BY 2.0 (France) Attribution: tatoeba.org #255245 (CK) & #825970 (Martha)
+I'm very happy. 我好高興。 CC-BY 2.0 (France) Attribution: tatoeba.org #255245 (CK) & #826258 (Martha)
+I'm very happy. 我很快乐。 CC-BY 2.0 (France) Attribution: tatoeba.org #255245 (CK) & #1361961 (sadhen)
+I'm very happy. 我很幸福。 CC-BY 2.0 (France) Attribution: tatoeba.org #255245 (CK) & #7767739 (jiangche)
+I'm very tired. 我很累。 CC-BY 2.0 (France) Attribution: tatoeba.org #252193 (CK) & #397734 (GlossaMatik)
+I've been sick. 我生病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #5850952 (CK) & #780291 (Martha)
+I've seen that. 我見過。 CC-BY 2.0 (France) Attribution: tatoeba.org #433647 (CK) & #824531 (Martha)
+Is Tom jealous? 汤姆嫉妒吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244614 (CK) & #10752755 (GlossaMatik)
+Is he Japanese? 他是日本人吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1123762 (CK) & #1366051 (sadhen)
+Is it too late? 来迟了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3333971 (CK) & #10002077 (GlossaMatik)
+Is that better? 那更好吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1886907 (CK) & #5670784 (verdastelo9604)
+Is this edible? 这个能吃吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2719776 (WestofEden) & #5100266 (mirrorvan)
+Isn't it black? 它不是黑色的嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #442968 (CK) & #826098 (Martha)
+It disappeared. 它不见了。 CC-BY 2.0 (France) Attribution: tatoeba.org #11277823 (Aphima) & #6075514 (mendel)
+It is too late. 太晚了。 CC-BY 2.0 (France) Attribution: tatoeba.org #456133 (lukaszpp) & #1397366 (mtdot)
+It makes sense. 那样说得通。 CC-BY 2.0 (France) Attribution: tatoeba.org #780836 (sacredceltic) & #5090960 (mirrorvan)
+It took months. 它花了几个月。 CC-BY 2.0 (France) Attribution: tatoeba.org #5758387 (CM) & #5963990 (verdastelo9604)
+It's brand new. 这是全新的。 CC-BY 2.0 (France) Attribution: tatoeba.org #34819 (Eldad) & #745869 (fucongcong)
+It's dangerous! 它是危險的! CC-BY 2.0 (France) Attribution: tatoeba.org #433517 (CK) & #832776 (Martha)
+It's delicious. 很美味。 CC-BY 2.0 (France) Attribution: tatoeba.org #2187204 (CK) & #3739208 (egg0073)
+It's foggy out. 外面起霧了。 CC-BY 2.0 (France) Attribution: tatoeba.org #9926150 (sundown) & #5957545 (xjjAstrus)
+It's not funny. 这不好笑。 CC-BY 2.0 (France) Attribution: tatoeba.org #1749344 (Spamster) & #1786116 (sadhen)
+It's not right. 不对。 CC-BY 2.0 (France) Attribution: tatoeba.org #1723740 (Spamster) & #10961087 (xjjAstrus)
+It's our fault. 它是我們的錯誤。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249149 (CK) & #6146511 (verdastelo9604)
+It's so boring. 真的很无聊。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249242 (CK) & #9965052 (GlossaMatik)
+It's the truth. 这是事实。 CC-BY 2.0 (France) Attribution: tatoeba.org #560933 (darinmex) & #819808 (fucongcong)
+It's too early. 太早了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249321 (CK) & #2007046 (sadhen)
+It's too large. 它太大了。 CC-BY 2.0 (France) Attribution: tatoeba.org #435410 (CK) & #824484 (Martha)
+It's up to you. 这就要看您了。 CC-BY 2.0 (France) Attribution: tatoeba.org #237713 (CK) & #501185 (fucongcong)
+It's up to you. 由你來決定。 CC-BY 2.0 (France) Attribution: tatoeba.org #237713 (CK) & #834868 (Martha)
+It's very cold. 非常冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #435726 (CK) & #826300 (Martha)
+It's very cold. 天气非常寒冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #435726 (CK) & #4547211 (murr)
+It's well done. 做得很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #2366 (CK) & #1776598 (sadhen)
+It's your book. 它是你的書。 CC-BY 2.0 (France) Attribution: tatoeba.org #515538 (CK) & #825185 (Martha)
+It's your move. 該你走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #16925 (CK) & #819408 (Martha)
+It's your turn. 輪到您了。 CC-BY 2.0 (France) Attribution: tatoeba.org #370937 (saeb) & #734317 (Martha)
+It's your turn. 輪到你了。 CC-BY 2.0 (France) Attribution: tatoeba.org #370937 (saeb) & #765859 (Martha)
+Keep listening. 继续听。 CC-BY 2.0 (France) Attribution: tatoeba.org #911230 (papabear) & #5092403 (mirrorvan)
+Leave it to me. 让我来弄。 CC-BY 2.0 (France) Attribution: tatoeba.org #321442 (CK) & #335500 (fucongcong)
+Leave me alone! 别烦我! CC-BY 2.0 (France) Attribution: tatoeba.org #25534 (CK) & #9964362 (GlossaMatik)
+Leave me alone. 让我一个人待着。 CC-BY 2.0 (France) Attribution: tatoeba.org #27641 (CK) & #8936496 (crescat)
+Let me come in. 让我进去。 CC-BY 2.0 (France) Attribution: tatoeba.org #3334006 (CK) & #333350 (fucongcong)
+Let me do that. 让我去做。 CC-BY 2.0 (France) Attribution: tatoeba.org #495419 (adjusting) & #347095 (fucongcong)
+Let us go home. 让我们回家吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #24136 (CK) & #1506916 (fenfang557)
+Let's go there. 咱去那吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #5178372 (CK) & #6938134 (Cheng)
+Let's just eat. 我們吃吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2007893 (CK) & #6105304 (verdastelo9604)
+Listen to this! 听这个! CC-BY 2.0 (France) Attribution: tatoeba.org #320075 (CK) & #9932534 (SbrAkr)
+Listen to this. 聽聽這個。 CC-BY 2.0 (France) Attribution: tatoeba.org #1898342 (CK) & #5344342 (egg0073)
+Louder, please. 请大声一点。 CC-BY 2.0 (France) Attribution: tatoeba.org #30399 (CK) & #406714 (fucongcong)
+Lunch is ready. 午餐好了。 CC-BY 2.0 (France) Attribution: tatoeba.org #3560086 (lys1123) & #884745 (Tajfun)
+Lying is wrong. 说谎不好。 CC-BY 2.0 (France) Attribution: tatoeba.org #633502 (bferrant) & #343586 (fucongcong)
+May I help you? 我能幫你嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #456357 (lukaszpp) & #6559076 (xjjAstrus)
+May I use this? 我可以用嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #54956 (CK) & #6158452 (xjjAstrus)
+My dad is busy. 我爸爸很忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #4787511 (Joseph) & #332500 (fucongcong)
+My nose itches. 我的鼻子好癢。 CC-BY 2.0 (France) Attribution: tatoeba.org #1369203 (sacredceltic) & #6017291 (xjjAstrus)
+My tooth hurts. 我牙疼。 CC-BY 2.0 (France) Attribution: tatoeba.org #456485 (lukaszpp) & #470984 (fucongcong)
+My tummy hurts. 我肚子疼。 CC-BY 2.0 (France) Attribution: tatoeba.org #4471276 (Hybrid) & #396056 (GlossaMatik)
+Now I remember. 现在我想起来了。 CC-BY 2.0 (France) Attribution: tatoeba.org #72076 (CK) & #472898 (fucongcong)
+Open your eyes. 睁开眼睛。 CC-BY 2.0 (France) Attribution: tatoeba.org #323768 (CK) & #8916070 (howd)
+Play us a tune. 给我们弹一手。 CC-BY 2.0 (France) Attribution: tatoeba.org #815666 (CM) & #815668 (GlossaMatik)
+Please come in. 請進來。 CC-BY 2.0 (France) Attribution: tatoeba.org #435705 (CK) & #824704 (Martha)
+Please do that. 麻煩您那樣做。 CC-BY 2.0 (France) Attribution: tatoeba.org #441943 (CK) & #824505 (Martha)
+Please help me. 請幫助我。 CC-BY 2.0 (France) Attribution: tatoeba.org #262424 (CK) & #804501 (Martha)
+Please help me. 請幫我。 CC-BY 2.0 (France) Attribution: tatoeba.org #262424 (CK) & #884721 (Tajfun)
+Please join us. 請加入我們。 CC-BY 2.0 (France) Attribution: tatoeba.org #3333875 (CK) & #6150018 (verdastelo9604)
+Please tell me. 請告訴我。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249818 (CK) & #6120892 (verdastelo9604)
+Please wash it. 请清洗它。 CC-BY 2.0 (France) Attribution: tatoeba.org #2042296 (somekinda) & #1884741 (Venki)
+Prices went up. 物價上漲。 CC-BY 2.0 (France) Attribution: tatoeba.org #442109 (CK) & #826138 (Martha)
+Read this book. 看这本书。 CC-BY 2.0 (France) Attribution: tatoeba.org #56828 (CK) & #461535 (fucongcong)
+Say it clearly. 說清楚。 CC-BY 2.0 (France) Attribution: tatoeba.org #433592 (CK) & #825177 (Martha)
+Science is fun. 科學好玩。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247299 (Hybrid) & #6047500 (verdastelo9604)
+See you around. 再见! CC-BY 2.0 (France) Attribution: tatoeba.org #32690 (CK) & #336477 (fucongcong)
+She fooled him. 她骗了他。 CC-BY 2.0 (France) Attribution: tatoeba.org #887116 (CK) & #2032218 (ydcok)
+She fooled him. 她愚弄了他。 CC-BY 2.0 (France) Attribution: tatoeba.org #887116 (CK) & #4270717 (notabene)
+She grew roses. 她種了玫瑰。 CC-BY 2.0 (France) Attribution: tatoeba.org #317533 (CK) & #825911 (Martha)
+She hugged him. 她抱了他。 CC-BY 2.0 (France) Attribution: tatoeba.org #887217 (CK) & #8215704 (verdastelo9604)
+She is a nurse. 她是护士。 CC-BY 2.0 (France) Attribution: tatoeba.org #313056 (CK) & #2779129 (iMaple)
+She is dieting. 她在节食中。 CC-BY 2.0 (France) Attribution: tatoeba.org #542361 (blay_paul) & #1878324 (sadhen)
+She is dieting. 她在节食。 CC-BY 2.0 (France) Attribution: tatoeba.org #542361 (blay_paul) & #7767995 (jiangche)
+She is walking. 她在行走。 CC-BY 2.0 (France) Attribution: tatoeba.org #1202628 (etoile) & #5092290 (mirrorvan)
+She looked sad. 她看上去很伤心。 CC-BY 2.0 (France) Attribution: tatoeba.org #316541 (CK) & #334870 (fucongcong)
+She might come. 她也許會來。 CC-BY 2.0 (France) Attribution: tatoeba.org #388733 (CK) & #826122 (Martha)
+She seems rich. 她看來有錢。 CC-BY 2.0 (France) Attribution: tatoeba.org #313318 (CK) & #6093377 (verdastelo9604)
+Shut your eyes. 闭上你们的眼睛。 CC-BY 2.0 (France) Attribution: tatoeba.org #1883049 (Spamster) & #1661563 (sadhen)
+Smoke appeared. 烟雾出现了。 CC-BY 2.0 (France) Attribution: tatoeba.org #680229 (Source_VOA) & #5102239 (mirrorvan)
+Someone called. 有人打電話來。 CC-BY 2.0 (France) Attribution: tatoeba.org #765402 (Martha) & #765386 (Martha)
+Sorry I'm late. 对不起,我迟到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #808702 (ryanthewired) & #444740 (fucongcong)
+Stop grumbling. 停止发牢骚吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #18356 (CK) & #5092142 (mirrorvan)
+Stop resisting! 停止抵抗! CC-BY 2.0 (France) Attribution: tatoeba.org #684473 (CM) & #5102240 (mirrorvan)
+Summer is over. 夏天过去了。 CC-BY 2.0 (France) Attribution: tatoeba.org #394438 (doviende) & #7774794 (jiangche)
+Take your time. 你可以慢慢来。 CC-BY 2.0 (France) Attribution: tatoeba.org #30121 (CK) & #334393 (fucongcong)
+Take your time. 慢慢来。 CC-BY 2.0 (France) Attribution: tatoeba.org #30121 (CK) & #334395 (fucongcong)
+That was wrong. 那样是错的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2250989 (CK) & #5096414 (mirrorvan)
+That's a shame. 那是一個恥辱。 CC-BY 2.0 (France) Attribution: tatoeba.org #435170 (CK) & #824604 (Martha)
+That's logical. 那符合逻辑。 CC-BY 2.0 (France) Attribution: tatoeba.org #2187259 (CK) & #7068906 (la_kanro)
+That's my coat. 那是我的大衣。 CC-BY 2.0 (France) Attribution: tatoeba.org #3622101 (weihaiping) & #471091 (fucongcong)
+That's my goal. 这是我的目的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2256892 (CK) & #9961355 (GlossaMatik)
+That's perfect. 那是完美的。 CC-BY 2.0 (France) Attribution: tatoeba.org #1897814 (CK) & #5650533 (verdastelo9604)
+That's strange. 奇怪。 CC-BY 2.0 (France) Attribution: tatoeba.org #320326 (CK) & #917754 (GlossaMatik)
+That's too bad. 太可惜了! CC-BY 2.0 (France) Attribution: tatoeba.org #433625 (CK) & #332578 (fucongcong)
+That's too bad. 多遗憾啊! CC-BY 2.0 (France) Attribution: tatoeba.org #433625 (CK) & #469440 (fucongcong)
+That's too bad. 那太糟糕了。 CC-BY 2.0 (France) Attribution: tatoeba.org #433625 (CK) & #826217 (Martha)
+The birds sang. 鳥兒歌唱。 CC-BY 2.0 (France) Attribution: tatoeba.org #278157 (CK) & #819283 (Martha)
+The cat meowed. 貓叫了叫。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549627 (CK) & #5670731 (verdastelo9604)
+The flag is up. 旗子升起了。 CC-BY 2.0 (France) Attribution: tatoeba.org #20530 (CK) & #813491 (fucongcong)
+The phone rang. 電話正在響。 CC-BY 2.0 (France) Attribution: tatoeba.org #2257534 (CK) & #710667 (egg0073)
+Their eyes met. 他們目光相接。 CC-BY 2.0 (France) Attribution: tatoeba.org #323737 (CK) & #6109301 (verdastelo9604)
+These are pens. 這些是筆。 CC-BY 2.0 (France) Attribution: tatoeba.org #737644 (CM) & #780043 (Martha)
+They hated Tom. 他們恨湯姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #305951 (CK) & #824618 (Martha)
+They have jobs. 他們有工作。 CC-BY 2.0 (France) Attribution: tatoeba.org #4397559 (CK) & #6624644 (verdastelo9604)
+They let me go. 他們讓我走。 CC-BY 2.0 (France) Attribution: tatoeba.org #495626 (CM) & #765254 (Martha)
+They love that. 他们喜欢那个 CC-BY 2.0 (France) Attribution: tatoeba.org #2243246 (CK) & #5975065 (zhangxr91)
+They trust Tom. 他们信任汤姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #2235922 (CK) & #5907509 (verdastelo9604)
+They want more. 他們想要更多。 CC-BY 2.0 (France) Attribution: tatoeba.org #1820314 (Spamster) & #4754636 (egg0073)
+They want this. 他們想要這箇。 CC-BY 2.0 (France) Attribution: tatoeba.org #2252724 (CK) & #6098442 (verdastelo9604)
+They were good. 他們不錯。 CC-BY 2.0 (France) Attribution: tatoeba.org #2243383 (CK) & #5569554 (verdastelo9604)
+This is a book. 这是一本书。 CC-BY 2.0 (France) Attribution: tatoeba.org #55399 (CK) & #336921 (fucongcong)
+This is a fake. 这是一个伪造品。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549624 (CK) & #630264 (CLARET)
+This is a fish. 這是一條魚。 CC-BY 2.0 (France) Attribution: tatoeba.org #2629585 (CM) & #2629586 (egg0073)
+This is a test. 这是一个测试。 CC-BY 2.0 (France) Attribution: tatoeba.org #2573684 (Hybrid) & #8602039 (mikeee)
+This is my bag. 那是我的包。 CC-BY 2.0 (France) Attribution: tatoeba.org #55628 (jakov) & #2040518 (sadhen)
+This isn't new. 这不是新的。 CC-BY 2.0 (France) Attribution: tatoeba.org #2233758 (CK) & #10260739 (GlossaMatik)
+Tom can change. 湯姆能改變。 CC-BY 2.0 (France) Attribution: tatoeba.org #4496506 (CK) & #6114396 (verdastelo9604)
+Tom can't stay. 汤姆不能留下。 CC-BY 2.0 (France) Attribution: tatoeba.org #1868426 (CK) & #9178012 (xiaohong)
+Tom can't swim. 汤姆不会游泳。 CC-BY 2.0 (France) Attribution: tatoeba.org #1026731 (CK) & #5072434 (musclegirlxyp)
+Tom can't walk. 汤姆不能走路了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1868425 (CK) & #9960184 (GlossaMatik)
+Tom got fatter. 汤姆胖了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236323 (CK) & #4977399 (musclegirlxyp)
+Tom has a plan. 湯姆有個計畫。 CC-BY 2.0 (France) Attribution: tatoeba.org #2649102 (CK) & #6075556 (verdastelo9604)
+Tom has brains. 汤姆脑子好使。 CC-BY 2.0 (France) Attribution: tatoeba.org #8589486 (CK) & #5072415 (musclegirlxyp)
+Tom has failed. 汤姆失败了。 CC-BY 2.0 (France) Attribution: tatoeba.org #4667266 (CK) & #8671326 (crescat)
+Tom is a rabbi. 汤姆是个拉比。 CC-BY 2.0 (France) Attribution: tatoeba.org #1494868 (Spamster) & #5983579 (verdastelo9604)
+Tom is married. 汤姆已经结婚了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1868191 (CK) & #9961309 (GlossaMatik)
+Tom is miserly. 汤姆很小气。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236774 (CK) & #4264932 (notabene)
+Tom is no fool. 汤姆不是傻瓜。 CC-BY 2.0 (France) Attribution: tatoeba.org #2273328 (CK) & #4879070 (musclegirlxyp)
+Tom is no fool. 汤姆不是白痴。 CC-BY 2.0 (France) Attribution: tatoeba.org #2273328 (CK) & #10260786 (GlossaMatik)
+Tom is sloshed. 汤姆醉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203365 (CK) & #5142201 (musclegirlxyp)
+Tom is smashed. 汤姆醉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203374 (CK) & #5142201 (musclegirlxyp)
+Tom isn't dumb. 汤姆不傻。 CC-BY 2.0 (France) Attribution: tatoeba.org #2236962 (CK) & #5091664 (mirrorvan)
+Tom likes tofu. 汤姆喜欢豆腐。 CC-BY 2.0 (France) Attribution: tatoeba.org #6608788 (Hybrid) & #9932446 (GlossaMatik)
+Tom lives here. 汤姆住在这里。 CC-BY 2.0 (France) Attribution: tatoeba.org #2237182 (CK) & #5613703 (verdastelo9604)
+Tom looks pale. 湯姆看起來很蒼白。 CC-BY 2.0 (France) Attribution: tatoeba.org #37170 (CK) & #826200 (Martha)
+Tom loves dogs. 汤姆喜欢狗。 CC-BY 2.0 (France) Attribution: tatoeba.org #2244696 (CK) & #7771665 (jiangche)
+Tom seems nice. 汤姆看着是个好人。 CC-BY 2.0 (France) Attribution: tatoeba.org #1867923 (CK) & #8879824 (crescat)
+Tom turned red. 汤姆脸红了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2238843 (CK) & #5092418 (mirrorvan)
+Tom walked out. 湯姆走了出去。 CC-BY 2.0 (France) Attribution: tatoeba.org #2261170 (CK) & #6206740 (verdastelo9604)
+Tom was crying. 汤姆当时在哭。 CC-BY 2.0 (France) Attribution: tatoeba.org #1488808 (Spamster) & #5114279 (musclegirlxyp)
+Tom was humble. 湯姆曾是謙遜的。 CC-BY 2.0 (France) Attribution: tatoeba.org #3171136 (CK) & #7980250 (Leolaaziano)
+Tom went blind. 汤姆失明了。 CC-BY 2.0 (France) Attribution: tatoeba.org #3171099 (CK) & #4972485 (wzhd)
+Tom won't stop. 湯姆不會停。 CC-BY 2.0 (France) Attribution: tatoeba.org #2240229 (CK) & #8215700 (verdastelo9604)
+Tom's Canadian. 汤姆是加拿大人。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107460 (CK) & #10696148 (GlossaMatik)
+Tom's bleeding. 汤姆在流血。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107456 (CK) & #10182726 (slo_oth)
+Tom's diabetic. 汤姆是糖尿病患者。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107488 (CK) & #6774616 (basilhan)
+Tom's fearless. 汤姆无所畏惧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107511 (CK) & #2188407 (sadhen)
+Tom's grinning. 汤姆露齿而笑。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107526 (CK) & #10021278 (GlossaMatik)
+Tom's laughing. 汤姆在笑。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107557 (CK) & #5072342 (musclegirlxyp)
+Tom's out cold. 汤姆正昏迷不醒。 CC-BY 2.0 (France) Attribution: tatoeba.org #3171072 (CK) & #8725793 (crescat)
+Tom's thrilled. 汤姆兴奋不已。 CC-BY 2.0 (France) Attribution: tatoeba.org #2107625 (CK) & #5094100 (mirrorvan)
+Tom, answer me! 湯姆,回答我! CC-BY 2.0 (France) Attribution: tatoeba.org #1877129 (Spamster) & #6579316 (xjjAstrus)
+Try once again. 再試一次。 CC-BY 2.0 (France) Attribution: tatoeba.org #2264432 (sharptoothed) & #824621 (Martha)
+Turn on the TV. 开电视。 CC-BY 2.0 (France) Attribution: tatoeba.org #1180903 (treskro3) & #472986 (fucongcong)
+Turn up the TV. 把电视声音调大点儿。 CC-BY 2.0 (France) Attribution: tatoeba.org #39214 (CK) & #1411619 (asosan)
+Was Tom asleep? 汤姆睡着了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3738354 (CK) & #5865518 (verdastelo9604)
+Wash your feet. 洗您的脚。 CC-BY 2.0 (France) Attribution: tatoeba.org #274488 (adjusting) & #487590 (fucongcong)
+Wash your feet. 洗你的脚。 CC-BY 2.0 (France) Attribution: tatoeba.org #274488 (adjusting) & #487593 (fucongcong)
+Watch yourself. 自己当心啊。 CC-BY 2.0 (France) Attribution: tatoeba.org #64496 (CK) & #5102151 (mirrorvan)
+We forgive you. 我們原諒你。 CC-BY 2.0 (France) Attribution: tatoeba.org #2241093 (CK) & #6068357 (verdastelo9604)
+We knew no one. 我們誰也不認識。 CC-BY 2.0 (France) Attribution: tatoeba.org #3733204 (CK) & #6131465 (verdastelo9604)
+We need a hero. 我們需要英雄。 CC-BY 2.0 (France) Attribution: tatoeba.org #2649076 (CK) & #8215716 (verdastelo9604)
+We study music. 我们学习音乐。 CC-BY 2.0 (France) Attribution: tatoeba.org #247742 (CK) & #1358711 (sadhen)
+We were robbed. 我們被偷了。 CC-BY 2.0 (France) Attribution: tatoeba.org #4397511 (CK) & #6284532 (xjjAstrus)
+We'll continue. 我们要继续下去。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203625 (CK) & #7768123 (jiangche)
+We're a family. 我們是個家庭。 CC-BY 2.0 (France) Attribution: tatoeba.org #2240835 (CK) & #6936397 (verdastelo9604)
+We're involved. 我们正参与。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203037 (CK) & #10513304 (GlossaMatik)
+We're not late. 我们没迟到。 CC-BY 2.0 (France) Attribution: tatoeba.org #2240626 (CK) & #4456370 (plutowu)
+Well, let's go. 好吧,我們走吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #410596 (CK) & #832441 (Martha)
+Were you happy? 你开心吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2044396 (CK) & #8924804 (crescat)
+Were you right? 你是对的吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2254510 (CK) & #5640753 (verdastelo9604)
+What about you? 你們呢? CC-BY 2.0 (France) Attribution: tatoeba.org #1642551 (CK) & #1623187 (egg0073)
+What about you? 您呢? CC-BY 2.0 (France) Attribution: tatoeba.org #1642551 (CK) & #1623188 (Yashanti)
+What do you do? 你的職業是什麼? CC-BY 2.0 (France) Attribution: tatoeba.org #17125 (CK) & #908379 (Martha)
+What'll you do? 你要做什么? CC-BY 2.0 (France) Attribution: tatoeba.org #2892667 (CK) & #9963161 (GlossaMatik)
+What's her job? 她做什麼工作? CC-BY 2.0 (France) Attribution: tatoeba.org #3205365 (CM) & #5640735 (verdastelo9604)
+Where do we go? 我们去哪儿? CC-BY 2.0 (France) Attribution: tatoeba.org #2649070 (CK) & #471103 (fucongcong)
+Where were you? 之前你在哪里? CC-BY 2.0 (France) Attribution: tatoeba.org #16486 (CK) & #1778322 (sadhen)
+Who's at fault? 是誰的錯呢? CC-BY 2.0 (France) Attribution: tatoeba.org #441941 (CM) & #824533 (Martha)
+Who's that guy? 那家伙是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #2254911 (CK) & #5595183 (verdastelo9604)
+Who's that man? 那男人是谁? CC-BY 2.0 (France) Attribution: tatoeba.org #1886552 (CK) & #7773140 (jiangche)
+Who's to blame? 是誰的錯呢? CC-BY 2.0 (France) Attribution: tatoeba.org #2057762 (CK) & #824533 (Martha)
+Why do you ask? 你問這個幹什麼? CC-BY 2.0 (France) Attribution: tatoeba.org #1368 (CK) & #56 (fucongcong)
+Why is he here? 为什么他在这儿? CC-BY 2.0 (France) Attribution: tatoeba.org #36344 (CK) & #408248 (fucongcong)
+Wipe your eyes. 擦擦你的眼睛。 CC-BY 2.0 (France) Attribution: tatoeba.org #3735829 (CK) & #6198252 (verdastelo9604)
+Yes, I know it. 是的,我知道。 CC-BY 2.0 (France) Attribution: tatoeba.org #433589 (CK) & #834241 (Martha)
+Yes, of course. 当然是的。 CC-BY 2.0 (France) Attribution: tatoeba.org #30530 (Zifre) & #421347 (GlossaMatik)
+Yes, of course. 是的,當然。 CC-BY 2.0 (France) Attribution: tatoeba.org #30530 (Zifre) & #712982 (egg0073)
+You are stupid. 你很愚蠢。 CC-BY 2.0 (France) Attribution: tatoeba.org #69480 (CM) & #993698 (leoyzy)
+You have to go. 你們得走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #16159 (xtofu80) & #1740732 (egg0073)
+You look bored. 你看起來很無聊。 CC-BY 2.0 (France) Attribution: tatoeba.org #15918 (CK) & #825165 (Martha)
+You look tense. 你看起来很紧张。 CC-BY 2.0 (France) Attribution: tatoeba.org #2255126 (CK) & #3289653 (sadhen)
+You look tired. 你看起來很疲倦。 CC-BY 2.0 (France) Attribution: tatoeba.org #63218 (CK) & #819306 (Martha)
+You look tired. 你看起来很困了。 CC-BY 2.0 (France) Attribution: tatoeba.org #63218 (CK) & #5097669 (mirrorvan)
+You must do it. 你必須去做。 CC-BY 2.0 (France) Attribution: tatoeba.org #770110 (marloncori) & #770244 (Martha)
+You must leave. 你必须走。 CC-BY 2.0 (France) Attribution: tatoeba.org #407094 (CM) & #407097 (GlossaMatik)
+You need to go. 你們得走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2649063 (CK) & #1740732 (egg0073)
+You'll love it. 你會愛它。 CC-BY 2.0 (France) Attribution: tatoeba.org #2255375 (CK) & #6065877 (verdastelo9604)
+You're a woman. 你是个女人。 CC-BY 2.0 (France) Attribution: tatoeba.org #1228740 (CM) & #9961365 (GlossaMatik)
+You're kidding! 你開玩笑吧! CC-BY 2.0 (France) Attribution: tatoeba.org #433881 (CK) & #819312 (Martha)
+You're my hero. 你是我的英雄。 CC-BY 2.0 (France) Attribution: tatoeba.org #1895594 (CK) & #3709591 (egg0073)
+You're sloshed. 你們醉了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203364 (CK) & #6608082 (xjjAstrus)
+You're sloshed. 你們喝多了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2203364 (CK) & #6608084 (xjjAstrus)
+You're welcome. 您不必感谢我。 CC-BY 2.0 (France) Attribution: tatoeba.org #403068 (Ramses) & #7767730 (jiangche)
+A man must work. 男人应该工作。 CC-BY 2.0 (France) Attribution: tatoeba.org #270113 (CM) & #334672 (fucongcong)
+Anyone can join. 谁都可以参加。 CC-BY 2.0 (France) Attribution: tatoeba.org #5758358 (CM) & #9962353 (GlossaMatik)
+Are we finished? 我们完成了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244924 (CK) & #1783788 (sadhen)
+Are you at home? 你在家里吗? CC-BY 2.0 (France) Attribution: tatoeba.org #405500 (CK) & #406192 (GlossaMatik)
+Are you certain? 你确定? CC-BY 2.0 (France) Attribution: tatoeba.org #1356753 (sacredceltic) & #4208543 (Ethan_lin)
+Are you friends? 你們是朋友嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #7787226 (sharris123) & #6047118 (xjjAstrus)
+Are you friends? 你们是朋友? CC-BY 2.0 (France) Attribution: tatoeba.org #7787226 (sharris123) & #10696113 (GlossaMatik)
+Are you friends? 你们是朋友吗? CC-BY 2.0 (France) Attribution: tatoeba.org #7787226 (sharris123) & #10966829 (xjjAstrus)
+Are you kidding? 你在开玩笑吗? CC-BY 2.0 (France) Attribution: tatoeba.org #270147 (CK) & #7768013 (jiangche)
+Are you married? 您成家了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #413058 (CM) & #413061 (GlossaMatik)
+Are you nervous? 你紧张吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244956 (CK) & #8696388 (morningstar)
+Are you over 18? 你有18歲了嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2900555 (Hybrid) & #6114400 (verdastelo9604)
+Are you serious? 你是认真的吗? CC-BY 2.0 (France) Attribution: tatoeba.org #373215 (kotobaboke) & #4887667 (musclegirlxyp)
+Are you serious? 你认真的? CC-BY 2.0 (France) Attribution: tatoeba.org #373215 (kotobaboke) & #10024445 (GlossaMatik)
+Are you serious? 认真的? CC-BY 2.0 (France) Attribution: tatoeba.org #373215 (kotobaboke) & #10983988 (Elaineeeeee)
+Are you thirsty? 你渴吗? CC-BY 2.0 (France) Attribution: tatoeba.org #434258 (lukaszpp) & #3365590 (go_oo)
+Are you working? 你在上班嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #245411 (CK) & #5999024 (xjjAstrus)
+Aren't you cold? 你不冷吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244975 (CK) & #8673739 (crescat)
+Balls are round. 球是圆的。 CC-BY 2.0 (France) Attribution: tatoeba.org #33654 (CK) & #1397373 (mtdot)
+Be happy for me. 爲我高興吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #2044400 (CK) & #5691285 (verdastelo9604)
+Be more precise. 更清晰些。 CC-BY 2.0 (France) Attribution: tatoeba.org #2244994 (CK) & #9961446 (GlossaMatik)
+Behave yourself. 规矩点。 CC-BY 2.0 (France) Attribution: tatoeba.org #64491 (CK) & #5092247 (mirrorvan)
+Black suits you. 黑色很衬你。 CC-BY 2.0 (France) Attribution: tatoeba.org #3140021 (Marissa) & #408242 (fucongcong)
+Boil some water. 烧一点水。 CC-BY 2.0 (France) Attribution: tatoeba.org #64141 (CK) & #392263 (fucongcong)
+Bring him to me. 把他给我带过来。 CC-BY 2.0 (France) Attribution: tatoeba.org #932524 (FeuDRenais) & #9970076 (GlossaMatik)
+Call me, please. 请给我打电话。 CC-BY 2.0 (France) Attribution: tatoeba.org #8794857 (dq) & #8933788 (crescat)
+Call my husband. 给我老公打电话。 CC-BY 2.0 (France) Attribution: tatoeba.org #1730012 (CM) & #10199327 (slo_oth)
+Call the police! 叫警察! CC-BY 2.0 (France) Attribution: tatoeba.org #1718 (CK) & #1205903 (cienias)
+Call the police! 报警! CC-BY 2.0 (France) Attribution: tatoeba.org #1718 (CK) & #1411630 (asosan)
+Call the police. 报警! CC-BY 2.0 (France) Attribution: tatoeba.org #2245030 (CK) & #1411630 (asosan)
+Can I bring Tom? 我可以带上汤姆吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2261175 (CK) & #8888287 (crescat)
+Can I come over? 我能去你那吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2173923 (Hybrid) & #10617829 (han637376)
+Can Tom help us? 汤姆可以帮我们吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1886268 (CK) & #8809754 (crescat)
+Can you feel it? 你感觉得到它吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3327479 (CK) & #10699361 (GlossaMatik)
+Can you find it? 你能找到它嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #239285 (adjusting) & #826199 (Martha)
+Can you hear me? 你听得见吗? CC-BY 2.0 (France) Attribution: tatoeba.org #250795 (CK) & #333415 (fucongcong)
+Can you help me? 您能幫我嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #434410 (lukaszpp) & #4071817 (egg0073)
+Can you help me? 你能幫我嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #434410 (lukaszpp) & #6559040 (xjjAstrus)
+Can you help me? 您能帮我吗? CC-BY 2.0 (France) Attribution: tatoeba.org #434410 (lukaszpp) & #7772052 (jiangche)
+Can you help us? 你能幫我們嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1886253 (CK) & #8215708 (verdastelo9604)
+Can you whistle? 你会吹口哨吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2245065 (CK) & #10260714 (GlossaMatik)
+Clean your room. 清掃你的房間。 CC-BY 2.0 (France) Attribution: tatoeba.org #435774 (CK) & #771567 (Martha)
+Clean your room. 打扫一下你的房间。 CC-BY 2.0 (France) Attribution: tatoeba.org #435774 (CK) & #7768207 (jiangche)
+Close your eyes. 闭上你的眼睛。 CC-BY 2.0 (France) Attribution: tatoeba.org #434446 (lukaszpp) & #405129 (fucongcong)
+Close your eyes. 闭上你们的眼睛。 CC-BY 2.0 (France) Attribution: tatoeba.org #434446 (lukaszpp) & #1661563 (sadhen)
+Come if you can. 你能来就来! CC-BY 2.0 (France) Attribution: tatoeba.org #450074 (CK) & #804811 (fucongcong)
+Come if you can. 如果你能就來吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #450074 (CK) & #825163 (Martha)
+Congratulations! 祝贺你。 CC-BY 2.0 (France) Attribution: tatoeba.org #1437 (CK) & #335058 (fucongcong)
+Congratulations! 恭喜! CC-BY 2.0 (France) Attribution: tatoeba.org #1437 (CK) & #4990053 (boanw)
+Congratulations! 恭喜你! CC-BY 2.0 (France) Attribution: tatoeba.org #1437 (CK) & #9992054 (GlossaMatik)
+Congratulations! 祝贺! CC-BY 2.0 (France) Attribution: tatoeba.org #1437 (CK) & #10066362 (CreeperVLin)
+Count to thirty. 数到三十。 CC-BY 2.0 (France) Attribution: tatoeba.org #707526 (papabear) & #710390 (fucongcong)
+Did Tom respond? 汤姆有回应了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2235681 (CK) & #4885087 (musclegirlxyp)
+Did Tom say who? 湯姆說是誰了嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2891039 (CK) & #5640741 (verdastelo9604)
+Did you miss me? 你想我了? CC-BY 2.0 (France) Attribution: tatoeba.org #1561 (CK) & #334429 (fucongcong)
+Did you take it? 你拿吗? CC-BY 2.0 (France) Attribution: tatoeba.org #3731817 (CM) & #6850327 (mao)
+Do you eat meat? 您吃不吃肉? CC-BY 2.0 (France) Attribution: tatoeba.org #427988 (CM) & #427989 (GlossaMatik)
+Do you go often? 您经常去吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1043614 (Brian255) & #785919 (fucongcong)
+Do you have one? 你有嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #16547 (CK) & #793230 (Martha)
+Do you know him? 你认识他吗? CC-BY 2.0 (France) Attribution: tatoeba.org #69003 (CK) & #431556 (fucongcong)
+Do you know him? 你认识他吗? CC-BY 2.0 (France) Attribution: tatoeba.org #69003 (CK) & #10966855 (xjjAstrus)
+Do you know why? 您知道为什么吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2891110 (CK) & #10695962 (GlossaMatik)
+Do you like rap? 你喜欢说唱音乐吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2310 (CK) & #1776572 (sadhen)
+Do you remember? 你记得吗? CC-BY 2.0 (France) Attribution: tatoeba.org #21678 (CK) & #444736 (fucongcong)
+Do you watch TV? 您看电视吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1626139 (CM) & #405016 (fucongcong)
+Does love exist? 愛存在嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1743386 (CM) & #3957689 (egg0073)
+Does that count? 那算数吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2245285 (CK) & #10695968 (GlossaMatik)
+Don't be fooled. 別被騙了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245300 (CK) & #6105191 (verdastelo9604)
+Don't bother me. 别来烦我。 CC-BY 2.0 (France) Attribution: tatoeba.org #1488089 (arnxy20) & #1505477 (fenfang557)
+Don't follow me. 别跟着来啊。 CC-BY 2.0 (France) Attribution: tatoeba.org #1849386 (CK) & #4885130 (musclegirlxyp)
+Don't forget me. 別忘了我。 CC-BY 2.0 (France) Attribution: tatoeba.org #3733064 (CK) & #6325084 (verdastelo9604)
+Don't forget us. 别忘了我们。 CC-BY 2.0 (France) Attribution: tatoeba.org #2003078 (AlanF_US) & #7769301 (jiangche)
+Don't open that. 別打開。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245363 (CK) & #5842630 (verdastelo9604)
+Don't run risks. 不要冒险。 CC-BY 2.0 (France) Attribution: tatoeba.org #20715 (al_ex_an_der) & #819827 (fucongcong)
+Don't tell lies. 别说谎! CC-BY 2.0 (France) Attribution: tatoeba.org #65615 (CK) & #796697 (fucongcong)
+Don't trust him. 你别相信他。 CC-BY 2.0 (France) Attribution: tatoeba.org #307858 (brauliobezerra) & #1750369 (sadhen)
+Don't you agree? 你不同意吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2136815 (GLOBULE38) & #7768002 (jiangche)
+Don't you agree? 您不同意吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2136815 (GLOBULE38) & #7768003 (jiangche)
+Drive carefully. 安全地駕駛。 CC-BY 2.0 (France) Attribution: tatoeba.org #265500 (CK) & #819285 (Martha)
+Drive carefully. 开车小心点。 CC-BY 2.0 (France) Attribution: tatoeba.org #265500 (CK) & #5102177 (mirrorvan)
+Eat more slowly. 慢点吃! CC-BY 2.0 (France) Attribution: tatoeba.org #4630811 (CK) & #10260718 (GlossaMatik)
+Everyone was OK. 大家都还行。 CC-BY 2.0 (France) Attribution: tatoeba.org #4401086 (CK) & #5091089 (mirrorvan)
+Follow that car. 跟上那辆车。 CC-BY 2.0 (France) Attribution: tatoeba.org #1300736 (CK) & #4970157 (wzhd)
+Get off my lawn. 滚出我的草坪! CC-BY 2.0 (France) Attribution: tatoeba.org #1934830 (Spamster) & #9958199 (GlossaMatik)
+Get out of here. 離開這裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #62081 (CK) & #826233 (Martha)
+Give Tom a hand. 幫湯姆一把。 CC-BY 2.0 (France) Attribution: tatoeba.org #2261873 (CK) & #6128506 (verdastelo9604)
+Give it to them. 把它给他们。 CC-BY 2.0 (France) Attribution: tatoeba.org #626780 (Archibald) & #792890 (fucongcong)
+Give me my beer. 把我的啤酒給我。 CC-BY 2.0 (France) Attribution: tatoeba.org #3151514 (CK) & #8215732 (verdastelo9604)
+Go home quickly. 赶快回家。 CC-BY 2.0 (France) Attribution: tatoeba.org #274014 (CK) & #5092584 (mirrorvan)
+Go to the patio. 去露台。 CC-BY 2.0 (France) Attribution: tatoeba.org #434798 (lukaszpp) & #1397108 (mtdot)
+Green suits you. 綠色適合你。 CC-BY 2.0 (France) Attribution: tatoeba.org #17538 (CK) & #824561 (Martha)
+Happy Halloween! 万圣节快乐! CC-BY 2.0 (France) Attribution: tatoeba.org #34980 (gin) & #343668 (fucongcong)
+Has he come yet? 他已经来了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #293048 (CK) & #4267322 (notabene)
+Have a nice day. 祝你一天过得愉快。 CC-BY 2.0 (France) Attribution: tatoeba.org #30085 (CK) & #336675 (fucongcong)
+He acts quickly. 他行动迅速。 CC-BY 2.0 (France) Attribution: tatoeba.org #288254 (CM) & #1888657 (Venki)
+He began to cry. 他开始哭了。 CC-BY 2.0 (France) Attribution: tatoeba.org #295240 (CK) & #5715130 (verdastelo9604)
+He can't be ill. 他不可能生病了。 CC-BY 2.0 (France) Attribution: tatoeba.org #284135 (CK) & #347069 (fucongcong)
+He has gone mad. 他疯了。 CC-BY 2.0 (France) Attribution: tatoeba.org #295109 (CK) & #1417582 (sadhen)
+He is a teacher. 他是教师。 CC-BY 2.0 (France) Attribution: tatoeba.org #295346 (CK) & #7768344 (jiangche)
+He is a teacher. 他是老师。 CC-BY 2.0 (France) Attribution: tatoeba.org #295346 (CK) & #7768345 (jiangche)
+He is my father. 他是我父親。 CC-BY 2.0 (France) Attribution: tatoeba.org #297979 (eS) & #796081 (Martha)
+He is very kind. 他非常親切。 CC-BY 2.0 (France) Attribution: tatoeba.org #480142 (CK) & #819413 (Martha)
+He is very tall. 他很高。 CC-BY 2.0 (France) Attribution: tatoeba.org #292154 (CK) & #1361951 (sadhen)
+He just arrived. 他刚到。 CC-BY 2.0 (France) Attribution: tatoeba.org #451727 (CM) & #451439 (fucongcong)
+He likes Disney. 他喜欢迪士尼。 CC-BY 2.0 (France) Attribution: tatoeba.org #288037 (CK) & #347030 (fucongcong)
+He looks strong. 他看起來很強壯。 CC-BY 2.0 (France) Attribution: tatoeba.org #295303 (CK) & #825904 (Martha)
+He loves trains. 他喜歡火車。 CC-BY 2.0 (France) Attribution: tatoeba.org #489677 (CK) & #826287 (Martha)
+He pressured me. 他向我施壓。 CC-BY 2.0 (France) Attribution: tatoeba.org #1902518 (blay_paul) & #5595163 (verdastelo9604)
+He studied hard. 他努力學習。 CC-BY 2.0 (France) Attribution: tatoeba.org #1908967 (Spamster) & #6103217 (verdastelo9604)
+He swindled her. 他欺骗了她。 CC-BY 2.0 (France) Attribution: tatoeba.org #302875 (CK) & #1704363 (sadhen)
+He tires easily. 他很容易觉得累。 CC-BY 2.0 (France) Attribution: tatoeba.org #997850 (NickC) & #335106 (fucongcong)
+He walks slowly. 他慢慢地走。 CC-BY 2.0 (France) Attribution: tatoeba.org #293207 (CK) & #512111 (fucongcong)
+He was very old. 他很老。 CC-BY 2.0 (France) Attribution: tatoeba.org #291592 (CK) & #1533413 (CLARET)
+He will survive. 他會倖存。 CC-BY 2.0 (France) Attribution: tatoeba.org #2025437 (Spamster) & #6151302 (verdastelo9604)
+He's a comedian. 他是喜剧演员。 CC-BY 2.0 (France) Attribution: tatoeba.org #327941 (CK) & #808215 (fucongcong)
+He's a good lad. 他是個好人。 CC-BY 2.0 (France) Attribution: tatoeba.org #2675712 (FeuDRenais) & #780339 (Martha)
+He's a tall boy. 他是一个高大的男孩。 CC-BY 2.0 (France) Attribution: tatoeba.org #714434 (CM) & #714432 (Yashanti)
+He's not a hero. 他不是英雄。 CC-BY 2.0 (France) Attribution: tatoeba.org #1815763 (Spamster) & #5613619 (verdastelo9604)
+He's not stupid. 他不是傻子。 CC-BY 2.0 (France) Attribution: tatoeba.org #526990 (CM) & #429141 (fucongcong)
+He's very angry. 他非常生气。 CC-BY 2.0 (France) Attribution: tatoeba.org #1323916 (CK) & #426894 (fucongcong)
+Here's the bill. 这是账单。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245561 (CK) & #7774826 (jiangche)
+Here's your tea. 這是你的茶。 CC-BY 2.0 (France) Attribution: tatoeba.org #3900748 (felvideki) & #5863244 (verdastelo9604)
+Hi! How are you? 嗨!你好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #30316 (Zifre) & #873404 (Martha)
+His word is law. 他的话就是命令。 CC-BY 2.0 (France) Attribution: tatoeba.org #287669 (CM) & #792851 (fucongcong)
+How are you all? 大家好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #914019 (Jane_Austen) & #819309 (Martha)
+How are you all? 你們好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #914019 (Jane_Austen) & #1761553 (egg0073)
+How do you feel? 你感觉如何? CC-BY 2.0 (France) Attribution: tatoeba.org #25724 (CK) & #5026446 (murr)
+How hot is that? 那個東西有多熱? CC-BY 2.0 (France) Attribution: tatoeba.org #9144900 (shou) & #9144904 (shou)
+How interesting! 多么有趣啊! CC-BY 2.0 (France) Attribution: tatoeba.org #1898371 (CK) & #7772100 (jiangche)
+How is everyone? 大家好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #22110 (CK) & #819309 (Martha)
+How is it going? 你們好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #38308 (CK) & #1761553 (egg0073)
+How much was it? 多少錢? CC-BY 2.0 (France) Attribution: tatoeba.org #2912655 (CK) & #761442 (Martha)
+How old are you? 你幾歲? CC-BY 2.0 (France) Attribution: tatoeba.org #436243 (lukaszpp) & #779497 (Martha)
+How rude of you! 你真粗魯! CC-BY 2.0 (France) Attribution: tatoeba.org #16444 (CK) & #819340 (Martha)
+How unfortunate! 可憐! CC-BY 2.0 (France) Attribution: tatoeba.org #2111810 (CK) & #766953 (Martha)
+How's everybody? 大家好嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1495905 (CK) & #819309 (Martha)
+How's the apple? 這個蘋果怎麼樣? CC-BY 2.0 (France) Attribution: tatoeba.org #6110489 (Sethlang) & #6092463 (xjjAstrus)
+I ache all over. 我全身酸痛。 CC-BY 2.0 (France) Attribution: tatoeba.org #63521 (CK) & #917936 (Martha)
+I am a bachelor. 我单身。 CC-BY 2.0 (France) Attribution: tatoeba.org #29048 (CK) & #4977440 (musclegirlxyp)
+I am a bachelor. 我單身。 CC-BY 2.0 (France) Attribution: tatoeba.org #29048 (CK) & #5691850 (xjjAstrus)
+I am a good boy. 我是一个好男孩。 CC-BY 2.0 (France) Attribution: tatoeba.org #1070261 (Valodnieks) & #1786007 (sadhen)
+I am busy today. 我今天忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #242977 (sacredceltic) & #8215733 (verdastelo9604)
+I am dead tired. 困死了。 CC-BY 2.0 (France) Attribution: tatoeba.org #3259457 (CM) & #2431733 (fenfang557)
+I am in trouble. 我有麻煩了。 CC-BY 2.0 (France) Attribution: tatoeba.org #257640 (CK) & #917920 (Martha)
+I am in trouble. 我遇到困難了。 CC-BY 2.0 (France) Attribution: tatoeba.org #257640 (CK) & #917927 (Martha)
+I am not stupid. 我不是笨蛋。 CC-BY 2.0 (France) Attribution: tatoeba.org #2857953 (CM) & #8698960 (crescat)
+I am very tired. 我很累。 CC-BY 2.0 (France) Attribution: tatoeba.org #854452 (piksea) & #397734 (GlossaMatik)
+I ate the apple. 我吃了這個蘋果。 CC-BY 2.0 (France) Attribution: tatoeba.org #770172 (marloncori) & #770261 (Martha)
+I baked cookies. 我烤了曲奇。 CC-BY 2.0 (France) Attribution: tatoeba.org #2245614 (CK) & #6325143 (verdastelo9604)
+I began running. 我開始跑。 CC-BY 2.0 (France) Attribution: tatoeba.org #5850896 (CK) & #6103124 (verdastelo9604)
+I booked a seat. 我訂了一個位子。 CC-BY 2.0 (France) Attribution: tatoeba.org #243651 (CM) & #731759 (Martha)
+I bought a book. 我買了一本書。 CC-BY 2.0 (France) Attribution: tatoeba.org #256043 (CK) & #941107 (Martha)
+I called Tom up. 我打電話給湯姆了。 CC-BY 2.0 (France) Attribution: tatoeba.org #255286 (CK) & #826242 (Martha)
+I called her up. 我給她打電話。 CC-BY 2.0 (France) Attribution: tatoeba.org #261210 (CK) & #5911676 (verdastelo9604)
+I can come, too. 我也能去。 CC-BY 2.0 (France) Attribution: tatoeba.org #8405946 (CK) & #8746411 (cxpadonis)
+I can sing well. 我唱歌很好听。 CC-BY 2.0 (France) Attribution: tatoeba.org #501171 (swagner) & #6884328 (maggiesq)
+I can swim well. 我游泳可以游得很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #258725 (CK) & #926770 (Martha)
+I can't do that. 我做不到。 CC-BY 2.0 (France) Attribution: tatoeba.org #1650200 (Spamster) & #7768005 (jiangche)
+I can't do this. 我做不到。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887124 (CK) & #7768005 (jiangche)
+I can't feel it. 我感觉不到它。 CC-BY 2.0 (France) Attribution: tatoeba.org #4401081 (CK) & #10699359 (GlossaMatik)
+I can't see you. 我看不見你。 CC-BY 2.0 (France) Attribution: tatoeba.org #1784974 (Amastan) & #5114860 (xjjAstrus)
+I can't stop it. 我无法阻止它。 CC-BY 2.0 (France) Attribution: tatoeba.org #1647936 (Spamster) & #10260745 (GlossaMatik)
+I can't undo it. 我不能取消它。 CC-BY 2.0 (France) Attribution: tatoeba.org #826005 (U2FS) & #827591 (Martha)
+I did it myself. 我自己做的。 CC-BY 2.0 (France) Attribution: tatoeba.org #454165 (mamat) & #512813 (fucongcong)
+I don't like it. 我不喜欢。 CC-BY 2.0 (France) Attribution: tatoeba.org #2271878 (CK) & #1361974 (sadhen)
+I don't want it. 我不要. CC-BY 2.0 (France) Attribution: tatoeba.org #452696 (CK) & #6850371 (mao)
+I enjoy running. 我喜欢跑步。 CC-BY 2.0 (France) Attribution: tatoeba.org #6358355 (CK) & #363979 (fucongcong)
+I feel relieved. 我感觉轻松了。 CC-BY 2.0 (France) Attribution: tatoeba.org #28489 (CK) & #787349 (fucongcong)
+I get up at six. 我六點起床。 CC-BY 2.0 (France) Attribution: tatoeba.org #321577 (CK) & #835368 (Martha)
+I had no choice. 那时我没有选择的余地。 CC-BY 2.0 (France) Attribution: tatoeba.org #1553472 (CK) & #1783803 (sadhen)
+I hate studying. 我讨厌学习。 CC-BY 2.0 (France) Attribution: tatoeba.org #537021 (tomkun01) & #471099 (fucongcong)
+I have a laptop. 我有一臺筆記本電腦。 CC-BY 2.0 (France) Attribution: tatoeba.org #4305641 (CK) & #9057853 (xjjAstrus)
+I have brothers. 我有兄弟。 CC-BY 2.0 (France) Attribution: tatoeba.org #773503 (marloncori) & #774537 (Martha)
+I have diabetes. 我有糖尿病。 CC-BY 2.0 (France) Attribution: tatoeba.org #280075 (CK) & #10699400 (GlossaMatik)
+I have no money. 我没钱了。 CC-BY 2.0 (France) Attribution: tatoeba.org #433613 (CK) & #10019726 (GlossaMatik)
+I have ten pens. 我有十支筆。 CC-BY 2.0 (France) Attribution: tatoeba.org #370732 (saeb) & #779472 (Martha)
+I have to hurry! 我要赶紧了! CC-BY 2.0 (France) Attribution: tatoeba.org #705285 (Zifre) & #793948 (fucongcong)
+I have two cars. 我有两辆车。 CC-BY 2.0 (France) Attribution: tatoeba.org #321849 (CK) & #411702 (fucongcong)
+I have two cats. 我有两只猫。 CC-BY 2.0 (France) Attribution: tatoeba.org #2412739 (fjrjdk) & #4878929 (musclegirlxyp)
+I have two sons. 我有兩個兒子。 CC-BY 2.0 (France) Attribution: tatoeba.org #2714934 (CK) & #6486891 (xjjAstrus)
+I just threw up. 我剛才吐了。 CC-BY 2.0 (France) Attribution: tatoeba.org #3962738 (JSakuragi) & #3713809 (egg0073)
+I know your son. 我认识你儿子。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841674 (CK) & #10182738 (slo_oth)
+I lent him a CD. 我借给他一盘CD。 CC-BY 2.0 (France) Attribution: tatoeba.org #260265 (CK) & #846778 (fucongcong)
+I like Tom, too. 我也喜歡湯姆。 CC-BY 2.0 (France) Attribution: tatoeba.org #5840522 (CK) & #6333807 (verdastelo9604)
+I like eggplant. 我喜歡茄子。 CC-BY 2.0 (France) Attribution: tatoeba.org #7156338 (Kiwi) & #6940065 (xjjAstrus)
+I like football. 我喜歡足球。 CC-BY 2.0 (France) Attribution: tatoeba.org #858100 (miravalles) & #5568572 (egg0073)
+I like potatoes. 我喜歡土豆。 CC-BY 2.0 (France) Attribution: tatoeba.org #5858134 (CK) & #6075487 (verdastelo9604)
+I like the cold. 我喜歡寒冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #252385 (CK) & #1647824 (egg0073)
+I like this dog. 我喜欢这只狗。 CC-BY 2.0 (France) Attribution: tatoeba.org #439591 (landano) & #1785983 (sadhen)
+I like your car. 我喜欢您的车。 CC-BY 2.0 (France) Attribution: tatoeba.org #257112 (CK) & #343424 (fucongcong)
+I live with Tom. 我和汤姆住。 CC-BY 2.0 (France) Attribution: tatoeba.org #2261961 (CK) & #11282484 (biscotto)
+I lost my money. 我丢了我的钱。 CC-BY 2.0 (France) Attribution: tatoeba.org #7798513 (sharris123) & #847698 (fucongcong)
+I love barbecue. 我喜欢烧烤食物。 CC-BY 2.0 (France) Attribution: tatoeba.org #1635960 (Spamster) & #2595832 (iMaple)
+I love this car. 我愛這台車。 CC-BY 2.0 (France) Attribution: tatoeba.org #4401060 (CK) & #5496248 (egg0073)
+I love you, too. 我也愛你。 CC-BY 2.0 (France) Attribution: tatoeba.org #628763 (meloncurtains) & #5500487 (egg0073)
+I might say yes. 我可能会说是。 CC-BY 2.0 (France) Attribution: tatoeba.org #2387228 (CK) & #5945148 (verdastelo9604)
+I must help her. 我必須幫助她。 CC-BY 2.0 (France) Attribution: tatoeba.org #816064 (afeinberg) & #816890 (Martha)
+I need a doctor. 我需要医生。 CC-BY 2.0 (France) Attribution: tatoeba.org #2280312 (CK) & #10699408 (GlossaMatik)
+I need a friend. 我需要个朋友。 CC-BY 2.0 (France) Attribution: tatoeba.org #3824522 (CK) & #5983631 (verdastelo9604)
+I need a lawyer. 我需要一名律師。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887574 (CK) & #6292460 (xjjAstrus)
+I need evidence. 我需要證據。 CC-BY 2.0 (France) Attribution: tatoeba.org #2246003 (CK) & #6293115 (verdastelo9604)
+I need his help. 我需要他的帮助。 CC-BY 2.0 (France) Attribution: tatoeba.org #286703 (CK) & #343475 (fucongcong)
+I need my boots. 我需要我的靴子。 CC-BY 2.0 (France) Attribution: tatoeba.org #7799644 (sharris123) & #6062102 (xjjAstrus)
+I need you here. 我需要你在這裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887591 (CK) & #6075557 (verdastelo9604)
+I only want one. 我只想要一件东西。 CC-BY 2.0 (France) Attribution: tatoeba.org #1956085 (CK) & #7774358 (jiangche)
+I paid the bill. 我买了单。 CC-BY 2.0 (France) Attribution: tatoeba.org #680368 (Source_VOA) & #808214 (fucongcong)
+I play football. 我踢足球。 CC-BY 2.0 (France) Attribution: tatoeba.org #2175511 (frog1011) & #9953360 (GlossaMatik)
+I played tennis. 我打網球了。 CC-BY 2.0 (France) Attribution: tatoeba.org #255092 (CK) & #826104 (Martha)
+I run every day. 我每天跑步。 CC-BY 2.0 (France) Attribution: tatoeba.org #261849 (CK) & #414247 (fucongcong)
+I study English. 我学英语。 CC-BY 2.0 (France) Attribution: tatoeba.org #256236 (CK) & #10448719 (GlossaMatik)
+I talked to Tom. 我和汤姆说了话。 CC-BY 2.0 (France) Attribution: tatoeba.org #1887701 (CK) & #7768303 (jiangche)
+I talked to her. 我跟她談了話。 CC-BY 2.0 (France) Attribution: tatoeba.org #1457695 (CK) & #5942089 (verdastelo9604)
+I think it's OK. 我想沒關係。 CC-BY 2.0 (France) Attribution: tatoeba.org #433884 (CK) & #771479 (Martha)
+I think so, too. 我也这么认为。 CC-BY 2.0 (France) Attribution: tatoeba.org #262339 (CK) & #411523 (fucongcong)
+I think so, too. 我也这么想。 CC-BY 2.0 (France) Attribution: tatoeba.org #262339 (CK) & #440005 (GlossaMatik)
+I think so, too. 我也是這麼想的。 CC-BY 2.0 (France) Attribution: tatoeba.org #262339 (CK) & #1227132 (tsayng)
+I threw a party. 我举办了一场派对。 CC-BY 2.0 (France) Attribution: tatoeba.org #10547917 (sundown) & #10114137 (GlossaMatik)
+I took a shower. 我洗了澡。 CC-BY 2.0 (France) Attribution: tatoeba.org #3126551 (lavenir) & #5624915 (verdastelo9604)
+I totally agree. 我完全同意。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247422 (CK) & #926858 (Martha)
+I turned it off. 我把它关了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2570986 (Hybrid) & #9963079 (GlossaMatik)
+I want a guitar. 我想要一把吉他。 CC-BY 2.0 (France) Attribution: tatoeba.org #63403 (CK) & #390449 (fucongcong)
+I want that bag. 我想要那個袋子。 CC-BY 2.0 (France) Attribution: tatoeba.org #68478 (CK) & #824622 (Martha)
+I want to drive. 我想開車。 CC-BY 2.0 (France) Attribution: tatoeba.org #258396 (CK) & #826158 (Martha)
+I want to sleep. 真想睡过去啊。 CC-BY 2.0 (France) Attribution: tatoeba.org #321870 (CK) & #2442076 (fenfang557)
+I wanted to cry. 我想哭。 CC-BY 2.0 (France) Attribution: tatoeba.org #4383868 (Hybrid) & #334542 (fucongcong)
+I was a teacher. 我当过老师。 CC-BY 2.0 (France) Attribution: tatoeba.org #432340 (CM) & #432344 (GlossaMatik)
+I was not drunk. 我沒醉。 CC-BY 2.0 (France) Attribution: tatoeba.org #1156060 (CK) & #8215707 (verdastelo9604)
+I was surprised. 我吃了一驚。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247521 (CK) & #5585229 (verdastelo9604)
+I wish you luck. 我祝您好运。 CC-BY 2.0 (France) Attribution: tatoeba.org #858589 (piksea) & #344208 (fucongcong)
+I wish you luck. 祝你好运。 CC-BY 2.0 (France) Attribution: tatoeba.org #858589 (piksea) & #812490 (fucongcong)
+I wish you luck. 祝您好运。 CC-BY 2.0 (France) Attribution: tatoeba.org #858589 (piksea) & #10511466 (Selina)
+I wish you'd go. 我希望你去。 CC-BY 2.0 (France) Attribution: tatoeba.org #2155930 (CM) & #864359 (Martha)
+I woke up early. 我起得早。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549543 (CK) & #6678462 (verdastelo9604)
+I won't be long. 不會花很多時間的。 CC-BY 2.0 (France) Attribution: tatoeba.org #1779996 (Spamster) & #1170427 (egg0073)
+I work too much. 我工作得太多了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1553441 (CK) & #1783806 (sadhen)
+I write letters. 我寫字母。 CC-BY 2.0 (France) Attribution: tatoeba.org #9401975 (BobbyLee) & #2243454 (cienias)
+I'll bring wine. 我會帶酒來。 CC-BY 2.0 (France) Attribution: tatoeba.org #5228978 (jaxhere) & #5640710 (verdastelo9604)
+I'll go by taxi. 我坐出租車去。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549527 (CK) & #9179887 (xjjAstrus)
+I'll never stop. 我絕不會停。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247791 (CK) & #6871856 (verdastelo9604)
+I'm a detective. 我是个侦探。 CC-BY 2.0 (France) Attribution: tatoeba.org #2247888 (CK) & #7774795 (jiangche)
+I'm a foreigner. 我是一個外國人。 CC-BY 2.0 (France) Attribution: tatoeba.org #809719 (Martha) & #809716 (Martha)
+I'm a good cook. 我是个好厨师。 CC-BY 2.0 (France) Attribution: tatoeba.org #325794 (CK) & #346721 (fucongcong)
+I'm a night owl. 我是個夜貓子。 CC-BY 2.0 (France) Attribution: tatoeba.org #321972 (CK) & #825924 (Martha)
+I'm a professor. 我是大学教授。 CC-BY 2.0 (France) Attribution: tatoeba.org #5853142 (CK) & #8762958 (crescat)
+I'm about ready. 我快好了。 CC-BY 2.0 (France) Attribution: tatoeba.org #33483 (CK) & #793259 (Martha)
+I'm almost done. 我差不多完成了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2040 (Swift) & #333787 (fucongcong)
+I'm always busy. 我总是有事。 CC-BY 2.0 (France) Attribution: tatoeba.org #2649020 (CK) & #7771930 (jiangche)
+I'm always here. 我一直在這裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #5975691 (CK) & #6114424 (verdastelo9604)
+I'm chewing gum. 我嚼口香糖。 CC-BY 2.0 (France) Attribution: tatoeba.org #5853100 (CK) & #9956903 (GlossaMatik)
+I'm daydreaming. 我在做白日夢。 CC-BY 2.0 (France) Attribution: tatoeba.org #5198885 (AlanF_US) & #6105117 (verdastelo9604)
+I'm eating rice. 我在吃米饭。 CC-BY 2.0 (France) Attribution: tatoeba.org #6873303 (CK) & #334506 (fucongcong)
+I'm feeling fit. 我覺得精神很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #33524 (CK) & #826231 (Martha)
+I'm from Boston. 他來自波士頓。 CC-BY 2.0 (France) Attribution: tatoeba.org #2549516 (CK) & #764477 (Martha)
+I'm getting old. 我在变老。 CC-BY 2.0 (France) Attribution: tatoeba.org #1619683 (Spamster) & #7768006 (jiangche)
+I'm job hunting. 我在找工作。 CC-BY 2.0 (France) Attribution: tatoeba.org #5858327 (CK) & #406364 (fucongcong)
+I'm left-handed. 我是左撇子。 CC-BY 2.0 (France) Attribution: tatoeba.org #321826 (CK) & #832799 (Martha)
+I'm not a witch. 我不是巫婆。 CC-BY 2.0 (France) Attribution: tatoeba.org #6873301 (CK) & #796646 (fucongcong)
+I'm not jealous. 我不嫉妒。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248154 (CK) & #7768001 (jiangche)
+I'm not married. 我单身。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841625 (CK) & #4977440 (musclegirlxyp)
+I'm not married. 我單身。 CC-BY 2.0 (France) Attribution: tatoeba.org #1841625 (CK) & #5691850 (xjjAstrus)
+I'm not serious. 我不是认真的。 CC-BY 2.0 (France) Attribution: tatoeba.org #1139052 (soj4l) & #461488 (fucongcong)
+I'm out of here. 我走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #455837 (lukaszpp) & #405498 (GlossaMatik)
+I'm out of time. 我没时间了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2713773 (CK) & #5555760 (verdastelo9604)
+I'm pretty busy. 我挺忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #2046667 (CK) & #6940059 (Cheng)
+I'm pretty tall. 我相当高。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248216 (CK) & #7772595 (jiangche)
+I'm really busy. 我真的好忙。 CC-BY 2.0 (France) Attribution: tatoeba.org #2046669 (CK) & #4760008 (ryanwoo)
+I'm really cold. 我真的冷。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248227 (CK) & #6065730 (verdastelo9604)
+I'm so worn out. 我好累。 CC-BY 2.0 (France) Attribution: tatoeba.org #1556502 (brymck) & #785298 (Martha)
+I'm still angry. 我还是很气。 CC-BY 2.0 (France) Attribution: tatoeba.org #4397631 (CK) & #9972435 (GlossaMatik)
+I'm still young. 我還年輕。 CC-BY 2.0 (France) Attribution: tatoeba.org #1806286 (Spamster) & #832459 (Martha)
+I'm very hungry. 我很餓。 CC-BY 2.0 (France) Attribution: tatoeba.org #433809 (CK) & #826048 (Martha)
+I'm very hungry. 我好饿。 CC-BY 2.0 (France) Attribution: tatoeba.org #433809 (CK) & #9991926 (GlossaMatik)
+I'm very lonely. 我很寂寞。 CC-BY 2.0 (France) Attribution: tatoeba.org #2649018 (CK) & #5091176 (mirrorvan)
+I'm very sleepy. 我非常困。 CC-BY 2.0 (France) Attribution: tatoeba.org #2649017 (CK) & #8968587 (ZeroAurora)
+I'm watching TV. 我在看电视。 CC-BY 2.0 (France) Attribution: tatoeba.org #2036345 (Dejo) & #10695997 (GlossaMatik)
+I'm your deputy. 我是你的代理人。 CC-BY 2.0 (France) Attribution: tatoeba.org #3374193 (CK) & #10513310 (GlossaMatik)
+I'm your father. 我是你爸爸。 CC-BY 2.0 (France) Attribution: tatoeba.org #1891163 (CK) & #6057860 (verdastelo9604)
+I'm your lawyer. 我是你的律师。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248326 (CK) & #10713945 (AwabiJan)
+I'm your sister. 我是你的妹妹。 CC-BY 2.0 (France) Attribution: tatoeba.org #1979740 (CM) & #2782904 (GlossaMatik)
+I've got a bike. 我有一輛自行車。 CC-BY 2.0 (France) Attribution: tatoeba.org #3091025 (CK) & #5112366 (xjjAstrus)
+I've got a boat. 我有一艘小船。 CC-BY 2.0 (France) Attribution: tatoeba.org #8399047 (CK) & #9179805 (xjjAstrus)
+I've got asthma. 我有哮喘。 CC-BY 2.0 (France) Attribution: tatoeba.org #10697421 (sundown) & #10699398 (GlossaMatik)
+I've had a bath. 我洗了澡。 CC-BY 2.0 (France) Attribution: tatoeba.org #10657443 (sundown) & #5624915 (verdastelo9604)
+I've had enough. 我已經受夠了。 CC-BY 2.0 (France) Attribution: tatoeba.org #433859 (CK) & #826273 (Martha)
+I've had enough. 我已經吃飽了。 CC-BY 2.0 (France) Attribution: tatoeba.org #433859 (CK) & #826276 (Martha)
+Is Tom Canadian? Tom是加拿大人嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2244584 (CK) & #5350387 (egg0073)
+Is Tom an actor? 汤姆是演员吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2649011 (CK) & #8877876 (crescat)
+Is Tom autistic? 汤姆有自闭症吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2235809 (CK) & #8832691 (crescat)
+Is Tom infected? 汤姆被感染了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2244610 (CK) & #8696436 (morningstar)
+Is Tom swimming? 汤姆在游泳吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2953034 (CK) & #8756401 (crescat)
+Is Tom with you? 汤姆和你在一起吗? CC-BY 2.0 (France) Attribution: tatoeba.org #1886872 (CK) & #10157039 (yeyue)
+Is anybody home? 家里有没有人? CC-BY 2.0 (France) Attribution: tatoeba.org #276298 (CK) & #408723 (GlossaMatik)
+Is he breathing? 他在呼吸嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #239892 (CK) & #772142 (Martha)
+Is it all there? 全都在那裡嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2891415 (CK) & #6146643 (verdastelo9604)
+Is it poisonous? 它有毒嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #2248466 (CK) & #8215687 (verdastelo9604)
+Is it too salty? 还有多余的盐吗? CC-BY 2.0 (France) Attribution: tatoeba.org #995263 (NickC) & #993764 (leoyzy)
+Is she Japanese? 她是日本人嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #1123763 (CK) & #1671358 (egg0073)
+Is this a river? 這是一條河嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #56259 (CK) & #788741 (Martha)
+Isn't that mine? 那是我的吗? CC-BY 2.0 (France) Attribution: tatoeba.org #2248691 (CK) & #4463426 (MirendaBABY)
+It is up to you. 由你來決定。 CC-BY 2.0 (France) Attribution: tatoeba.org #42493 (CK) & #834868 (Martha)
+It really works. 真的有用。 CC-BY 2.0 (France) Attribution: tatoeba.org #2032690 (Amastan) & #9953347 (GlossaMatik)
+It snowed a lot. 下了很多的雪。 CC-BY 2.0 (France) Attribution: tatoeba.org #1045510 (tatomeimei) & #759541 (Martha)
+It was my fault. 这是我的错。 CC-BY 2.0 (France) Attribution: tatoeba.org #1745701 (Spamster) & #790573 (GlossaMatik)
+It was terrible. 真糟糕。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248884 (CK) & #5576793 (verdastelo9604)
+It was very far. 很遠。 CC-BY 2.0 (France) Attribution: tatoeba.org #5758327 (CM) & #6132230 (verdastelo9604)
+It'll be cloudy. 天要变多云了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2631810 (Joseph) & #6080240 (verdastelo9604)
+It'll rain soon. 天快要下雨了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2248988 (CK) & #335128 (fucongcong)
+It's a dead end. 这是个死胡同。 CC-BY 2.0 (France) Attribution: tatoeba.org #2176 (CK) & #503300 (fucongcong)
+It's a nice day. 今天天氣很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #433659 (CK) & #819387 (Martha)
+It's a surprise. 这是一个惊喜。 CC-BY 2.0 (France) Attribution: tatoeba.org #1567 (CK) & #334423 (fucongcong)
+It's almost six. 差不多六点了。 CC-BY 2.0 (France) Attribution: tatoeba.org #519311 (CK) & #609853 (CLARET)
+It's almost six. 快要六點了。 CC-BY 2.0 (France) Attribution: tatoeba.org #519311 (CK) & #832800 (Martha)
+It's already 11. 已经是11点了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1230697 (alec) & #334137 (fucongcong)
+It's cool today. 今天很凉快。 CC-BY 2.0 (France) Attribution: tatoeba.org #242990 (CK) & #405263 (fucongcong)
+It's fine today. 今天天气很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #242938 (CK) & #333127 (fucongcong)
+It's impossible. 這是不可能的。 CC-BY 2.0 (France) Attribution: tatoeba.org #433459 (CK) & #824702 (Martha)
+It's lunch time. 午餐時間到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #433692 (CK) & #825916 (Martha)
+It's nearly six. 差不多六点了。 CC-BY 2.0 (France) Attribution: tatoeba.org #5290178 (Joseph) & #609853 (CLARET)
+It's okay to go. 你可以走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #518554 (CK) & #824627 (Martha)
+It's over there. 在那裡。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249154 (CK) & #5856785 (verdastelo9604)
+It's really big. 它很大。 CC-BY 2.0 (France) Attribution: tatoeba.org #2249203 (CK) & #832782 (Martha)
+It's time to go. 該走了。 CC-BY 2.0 (France) Attribution: tatoeba.org #266757 (CK) & #793328 (Martha)
+It's time to go. 是該離開的時候了。 CC-BY 2.0 (France) Attribution: tatoeba.org #266757 (CK) & #793329 (Martha)
+Jesus loves you. 耶穌愛你。 CC-BY 2.0 (France) Attribution: tatoeba.org #823857 (slomox) & #824412 (Martha)
+Keep on smiling. 保持微笑。 CC-BY 2.0 (France) Attribution: tatoeba.org #318128 (CK) & #778735 (Martha)
+Keep on working. 繼續工作! CC-BY 2.0 (France) Attribution: tatoeba.org #3507575 (CK) & #3982106 (tsayng)
+Keep the change! 不用找零钱了。 CC-BY 2.0 (France) Attribution: tatoeba.org #39748 (CK) & #1411509 (asosan)
+Large, isn't it? 很大, 不是嗎? CC-BY 2.0 (France) Attribution: tatoeba.org #435613 (CK) & #771584 (Martha)
+Leave him alone. 让他一个人待着。 CC-BY 2.0 (France) Attribution: tatoeba.org #278533 (CK) & #363872 (fucongcong)
+Lemons are sour. 檸檬是酸的。 CC-BY 2.0 (France) Attribution: tatoeba.org #435751 (CK) & #826253 (Martha)
+Let me go alone. 讓我一個人去。 CC-BY 2.0 (France) Attribution: tatoeba.org #27652 (CK) & #825893 (Martha)
+Let me see that. 讓我看看。 CC-BY 2.0 (France) Attribution: tatoeba.org #41848 (CK) & #819468 (Martha)
+Let them decide. 讓他們決定。 CC-BY 2.0 (France) Attribution: tatoeba.org #3071634 (sharptoothed) & #4732044 (egg0073)
+Let's eat sushi. 讓我們吃壽司吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #449059 (CK) & #824678 (Martha)
+Let's get drunk. 让我们一醉方休吧! CC-BY 2.0 (France) Attribution: tatoeba.org #1891276 (CK) & #10552163 (GlossaMatik)
+Let's go by bus. 讓我們坐公共汽車去。 CC-BY 2.0 (France) Attribution: tatoeba.org #450028 (CK) & #826293 (Martha)
+Let's not argue. 我們別吵了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2007873 (CK) & #2660863 (egg0073)
+Let's rest here. 在这里稍微休息一下吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #61882 (CK) & #8749668 (crescat)
+Let's turn back. 我们掉头吧! CC-BY 2.0 (France) Attribution: tatoeba.org #27144 (CK) & #472905 (fucongcong)
+Look at the sky. 看天上。 CC-BY 2.0 (France) Attribution: tatoeba.org #2648989 (CK) & #2081723 (sadhen)
+Look behind you. 瞧你身後。 CC-BY 2.0 (France) Attribution: tatoeba.org #433623 (CK) & #819456 (Martha)
+Make it smaller. 把它弄小一點。 CC-BY 2.0 (France) Attribution: tatoeba.org #433495 (CK) & #825894 (Martha)
+May I leave now? 我现在能走了吗? CC-BY 2.0 (France) Attribution: tatoeba.org #242132 (CK) & #476636 (fucongcong)
+May I try it on? 我能试一下吗? CC-BY 2.0 (France) Attribution: tatoeba.org #41784 (CK) & #782915 (fucongcong)
+Maybe next time. 也许下一次吧。 CC-BY 2.0 (France) Attribution: tatoeba.org #1516119 (gonnastop) & #710745 (Yashanti)
+Men should work. 男人应该工作。 CC-BY 2.0 (France) Attribution: tatoeba.org #1479231 (weihaiping) & #334672 (fucongcong)
+Merry Christmas! 聖誕快樂。 CC-BY 2.0 (France) Attribution: tatoeba.org #1723 (brauliobezerra) & #779499 (Martha)
+Mom, I'm hungry. 妈妈,我肚子饿了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2764199 (CK) & #4473138 (yuiyu)
+My father walks. 我爸爸走路。 CC-BY 2.0 (France) Attribution: tatoeba.org #557422 (CK) & #4757681 (ryanwoo)
+My house is big. 我家很大。 CC-BY 2.0 (France) Attribution: tatoeba.org #250554 (Scott) & #336235 (fucongcong)
+Never say never. 永远不要说永远。 CC-BY 2.0 (France) Attribution: tatoeba.org #505754 (Mehdi) & #1330012 (vicch)
+Nice to see you. 见到你真好。 CC-BY 2.0 (France) Attribution: tatoeba.org #32688 (CK) & #795754 (fucongcong)
+No one was late. 没有人迟到。 CC-BY 2.0 (France) Attribution: tatoeba.org #415455 (CM) & #803851 (fucongcong)
+No, I didn't go. 不,我沒去。 CC-BY 2.0 (France) Attribution: tatoeba.org #516735 (CK) & #819356 (Martha)
+Nobody wants it. 这个没人要。 CC-BY 2.0 (France) Attribution: tatoeba.org #672179 (Eldad) & #6799704 (basilhan)
+Open the bottle. 把瓶子打开。 CC-BY 2.0 (France) Attribution: tatoeba.org #49963 (CK) & #1411634 (asosan)
+Please be quiet. 請安靜。 CC-BY 2.0 (France) Attribution: tatoeba.org #449049 (CK) & #825998 (Martha)
+Please continue. 请继续。 CC-BY 2.0 (France) Attribution: tatoeba.org #870628 (CK) & #5102256 (mirrorvan)
+Please sit down. 请坐一下。 CC-BY 2.0 (France) Attribution: tatoeba.org #415594 (CM) & #415599 (GlossaMatik)
+Please sit down. 請坐下。 CC-BY 2.0 (France) Attribution: tatoeba.org #415594 (CM) & #826147 (Martha)
+Prices are high. 价格高。 CC-BY 2.0 (France) Attribution: tatoeba.org #65710 (CK) & #8696342 (crescat)
+Put your hat on. 戴上你的帽子。 CC-BY 2.0 (France) Attribution: tatoeba.org #321117 (CK) & #895823 (Martha)
+Say no to drugs. 對毒品說不。 CC-BY 2.0 (France) Attribution: tatoeba.org #827226 (Scott) & #827526 (Martha)
+Scary, isn't it? 是不是嚇人? CC-BY 2.0 (France) Attribution: tatoeba.org #2549491 (CK) & #6150894 (verdastelo9604)
+See you about 7. 我们7点左右碰头。 CC-BY 2.0 (France) Attribution: tatoeba.org #72342 (CK) & #375350 (fucongcong)
+See you tonight. 今晚見。 CC-BY 2.0 (France) Attribution: tatoeba.org #2648979 (CK) & #6028180 (verdastelo9604)
+Send it airmail. 航空邮寄它。 CC-BY 2.0 (France) Attribution: tatoeba.org #2259106 (_undertoad) & #9961356 (GlossaMatik)
+She calmed down. 她冷靜下來。 CC-BY 2.0 (France) Attribution: tatoeba.org #3272732 (CM) & #6132218 (verdastelo9604)
+She disappeared. 她消失了。 CC-BY 2.0 (France) Attribution: tatoeba.org #1442219 (CK) & #5372267 (egg0073)
+She is graceful. 她举止优雅。 CC-BY 2.0 (France) Attribution: tatoeba.org #317252 (CK) & #4972683 (wzhd)
+She looked away. 她轉移了視線。 CC-BY 2.0 (France) Attribution: tatoeba.org #512653 (CK) & #825166 (Martha)
+She looks young. 她看起来很年轻。 CC-BY 2.0 (France) Attribution: tatoeba.org #314853 (CK) & #2188409 (sadhen)
+She lost a book. 她弄丟了一本書。 CC-BY 2.0 (France) Attribution: tatoeba.org #1275204 (CK) & #1275212 (egg0073)
+She married him. 她嫁给了他。 CC-BY 2.0 (France) Attribution: tatoeba.org #316246 (CK) & #4970155 (wzhd)
+She worked hard. 她努力地工作。 CC-BY 2.0 (France) Attribution: tatoeba.org #312575 (CK) & #817269 (fucongcong)
+She's my sister. 她是我的姊妹。 CC-BY 2.0 (France) Attribution: tatoeba.org #469126 (CK) & #825891 (Martha)
+She's on a diet. 她在节食中。 CC-BY 2.0 (France) Attribution: tatoeba.org #707288 (papabear) & #1878324 (sadhen)
+She's on a diet. 她在节食。 CC-BY 2.0 (France) Attribution: tatoeba.org #707288 (papabear) & #7767995 (jiangche)
+She's seventeen. 她十七岁了。 CC-BY 2.0 (France) Attribution: tatoeba.org #2765315 (CK) & #3485499 (GlossaMatik)
+Shut your mouth. 闭上你的嘴。 CC-BY 2.0 (France) Attribution: tatoeba.org #240561 (CK) & #1691765 (sadhen)
+So far, so good. 迄今,一切妥当。 CC-BY 2.0 (France) Attribution: tatoeba.org #55348 (CM) & #1749264 (sadhen)
+Spring has come. 春天到了。 CC-BY 2.0 (France) Attribution: tatoeba.org #441964 (CK) & #1490515 (sadhen)
+That dog is big. 這隻狗很大。 CC-BY 2.0 (France) Attribution: tatoeba.org #68734 (CK) & #825158 (Martha)
+That feels good. 那看來很好。 CC-BY 2.0 (France) Attribution: tatoeba.org #2250109 (CK) & #5845579 (verdastelo9604)
+That isn't fair. 這不公平。 CC-BY 2.0 (France) Attribution: tatoeba.org #442966 (CK) & #819322 (Martha)
+That smells bad. 那不好聞。 CC-BY 2.0 (France) Attribution: tatoeba.org #4062886 (CK) & #6091666 (verdastelo9604)
+That's a pencil. 那是一支铅笔。 CC-BY 2.0 (France) Attribution: tatoeba.org #8305536 (shekitten) & #336695 (fucongcong)
+That's my money. 那是我的钱。 CC-BY 2.0 (France) Attribution: tatoeba.org #6670223 (thegui) & #8727837 (crescat)
diff --git a/examples/trans/data.py b/examples/trans/data.py
new file mode 100644
index 0000000..8be5157
--- /dev/null
+++ b/examples/trans/data.py
@@ -0,0 +1,181 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import re
+import numpy as np
+from collections import Counter
+
+
+class Vocab:
+ """
+ The class of vocab, include 2 dicts of token to index and index to token
+ """
+ def __init__(self, sentences):
+ """
+ Args:
+ sentences: a 2-dim list
+ """
+ flatten = lambda lst: [item for sublist in lst for item in sublist]
+ self.sentence = sentences
+ self.token2index = {'<pad>': 0, '<bos>': 1, '<eos>': 2, '<unk>': 3}
+ self.token2index.update({
+ token: index + 4
+ for index, (token, freq) in enumerate(
+ sorted(Counter(flatten(self.sentence)).items(), key=lambda x: x[1], reverse=True))
+ })
+ self.index2token = {index: token for token, index in self.token2index.items()}
+
+ def __getitem__(self, query):
+ if isinstance(query, str):
+ return self.token2index.get(query, self.token2index.get('<unk>'))
+ elif isinstance(query, (int, np.int32, np.int64)):
+ return self.index2token.get(query, '<unk>')
+ elif isinstance(query, (list, tuple, np.ndarray)):
+ return [self.__getitem__(item) for item in query]
+ else:
+ raise ValueError("The type of query is invalid.")
+
+ def __len__(self):
+ return len(self.index2token)
+
+
+class CmnDataset:
+ def __init__(self, path='cmn-eng/cmn.txt', shuffle=False, batch_size=32, train_ratio=0.8, random_seed=0):
+ """
+ cmn dataset, download from https://www.manythings.org/anki/, contains 29909 Chinese and English translation
+ pairs, the pair format: English + TAB + Chinese + TAB + Attribution
+ Args:
+ path: the path of the dataset, default 'cmn-eng/cnn.txt'
+ shuffle: shuffle the dataset, default False
+ batch_size: the size of every batch, default 32
+ train_ratio: the proportion of the training set to the total data set, default 0.8
+ random_seed: the random seed, used for shuffle operation, default 0
+ """
+ src_max_len, tgt_max_len, src_sts, tgt_sts = CmnDataset._split_sentences(path)
+ en_vab, cn_vab = Vocab(src_sts), Vocab(tgt_sts)
+ src_np, tgt_in_np, tgt_out_np = CmnDataset._encoding_stc(src_sts, tgt_sts, src_max_len, tgt_max_len,
+ en_vab, cn_vab)
+
+ self.src_max_len, self.tgt_max_len = src_max_len, tgt_max_len
+ self.en_vab, self.cn_vab = en_vab, cn_vab
+ self.en_vab_size, self.cn_vab_size = len(en_vab), len(cn_vab)
+
+ self.src_inputs, self.tgt_inputs, self.tgt_outputs = src_np, tgt_in_np, tgt_out_np
+
+ self.shuffle, self.random_seed = shuffle, random_seed
+
+ assert batch_size > 0, "The number of batch_size must be greater than 0"
+ self.batch_size = batch_size
+
+ assert (0 < train_ratio <= 1.0), "The number of train_ratio must be in (0.0, 1.0]"
+ self.train_ratio = train_ratio
+
+ self.total_size = len(src_np)
+ self.train_size = int(self.total_size * train_ratio)
+ self.test_size = self.total_size - self.train_size
+
+ if shuffle:
+ index = [i for i in range(self.total_size)]
+ np.random.seed(self.random_seed)
+ np.random.shuffle(index)
+
+ self.src_inputs = src_np[index]
+ self.tgt_inputs = tgt_in_np[index]
+ self.tgt_outputs = tgt_out_np[index]
+
+ self.train_src_inputs, self.test_src_inputs = self.src_inputs[:self.train_size], self.src_inputs[self.train_size:]
+ self.train_tgt_inputs, self.test_tgt_inputs = self.tgt_inputs[:self.train_size], self.tgt_inputs[self.train_size:]
+ self.train_tgt_outputs, self.test_tgt_outputs = self.tgt_outputs[:self.train_size], self.tgt_outputs[self.train_size:]
+
+ @staticmethod
+ def _split_sentences(path):
+ en_max_len, cn_max_len = 0, 0
+ en_sts, cn_sts = [], []
+ with open(path, 'r', encoding='utf-8') as f:
+ for line in f:
+ line_split = line.split('\t')
+ line_split[0] = re.sub(r'[^\w\s\'-]', '', line_split[0])
+ line_split[0] = line_split[0].lower()
+ # [\u4e00-\u9fa5] matching Chinese characters
+ line_split[1] = re.sub("[^\u4e00-\u9fa5]", "", line_split[1])
+
+ en_stc = line_split[0].split(' ')
+ cn_stc = [word for word in line_split[1]]
+ en_sts.append(en_stc)
+ cn_sts.append(cn_stc)
+ en_max_len = max(en_max_len, len(en_stc))
+ cn_max_len = max(cn_max_len, len(cn_stc))
+ return en_max_len, cn_max_len, en_sts, cn_sts
+
+ @staticmethod
+ def _encoding_stc(src_tokens, tgt_tokens, src_max_len, tgt_max_len, src_vocab, tgt_vocab):
+ src_list = []
+ for line in src_tokens:
+ if len(line) > src_max_len:
+ line = line[:src_max_len]
+ lst = src_vocab[line + ['<pad>'] * (src_max_len + 1 - len(line))]
+ src_list.append(lst)
+ tgt_in_list, tgt_out_list = [], []
+ for line in tgt_tokens:
+ if len(line) > tgt_max_len:
+ line = line[:tgt_max_len]
+ in_lst = tgt_vocab[['<bos>'] + line + ['<pad>'] * (tgt_max_len - len(line))]
+ out_lst = tgt_vocab[line + ['<eos>'] + ['<pad>'] * (tgt_max_len - len(line))]
+ tgt_in_list.append(in_lst)
+ tgt_out_list.append(out_lst)
+ src_np = np.asarray(src_list, dtype=np.int32)
+ tgt_in_np = np.asarray(tgt_in_list, dtype=np.int32)
+ tgt_out_np = np.asarray(tgt_out_list, dtype=np.int32)
+ return src_np, tgt_in_np, tgt_out_np
+
+ def get_batch_data(self, batch, mode='train'):
+ assert (mode == 'train' or mode == 'test'), "The mode must be 'train' or 'test'."
+ total_size = self.train_size
+ if mode == 'test':
+ total_size = self.test_size
+
+ max_batch = total_size // self.batch_size
+ if total_size % self.batch_size > 0:
+ max_batch += 1
+ assert batch < max_batch, "The batch number is out of bounds."
+
+ low = batch * self.batch_size
+ if (batch + 1) * self.batch_size < total_size:
+ high = (batch + 1) * self.batch_size
+ else:
+ high = total_size
+ if mode == 'train':
+ if high-low != self.batch_size:
+ return (np.concatenate((self.train_src_inputs[low:high], self.train_src_inputs[:self.batch_size-high+low]), axis=0),
+ np.concatenate((self.train_tgt_inputs[low:high], self.train_tgt_inputs[:self.batch_size-high+low]), axis=0),
+ np.concatenate((self.train_tgt_outputs[low:high], self.train_tgt_outputs[:self.batch_size-high+low]), axis=0))
+ else:
+ return self.train_src_inputs[low:high], self.train_tgt_inputs[low:high], self.train_tgt_outputs[low:high]
+ else:
+ if high-low != self.batch_size:
+ return (np.concatenate((self.test_src_inputs[low:high], self.test_src_inputs[:self.batch_size-high+low]), axis=0),
+ np.concatenate((self.test_tgt_inputs[low:high], self.test_tgt_inputs[:self.batch_size-high+low]), axis=0),
+ np.concatenate((self.test_tgt_outputs[low:high], self.test_tgt_outputs[:self.batch_size-high+low]), axis=0))
+ return self.test_src_inputs[low:high], self.test_tgt_inputs[low:high], self.test_tgt_outputs[low:high]
+
+ def __len__(self):
+ return self.src_inputs.shape[0]
+
+ def __getitem__(self, idx):
+ return self.src_inputs[idx], self.tgt_inputs[idx], self.tgt_outputs[idx]
diff --git a/examples/trans/model.py b/examples/trans/model.py
new file mode 100644
index 0000000..fc94a0c
--- /dev/null
+++ b/examples/trans/model.py
@@ -0,0 +1,625 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import math
+import numpy as np
+from singa import tensor
+from singa import autograd
+from singa import layer
+from singa import model
+from singa.tensor import Tensor
+
+
+class Transformer(model.Model):
+ def __init__(self, src_n_token, tgt_n_token, d_model=512, n_head=8, dim_feedforward=2048, n_layers=6):
+ """
+ Transformer model
+ Args:
+ src_n_token: the size of source vocab
+ tgt_n_token: the size of target vocab
+ d_model: the number of expected features in the encoder/decoder inputs (default=512)
+ n_head: the number of heads in the multi head attention models (default=8)
+ dim_feedforward: the dimension of the feedforward network model (default=2048)
+ n_layers: the number of sub-en(de)coder-layers in the en(de)coder (default=6)
+ """
+ super(Transformer, self).__init__()
+
+ self.opt = None
+ self.src_n_token = src_n_token
+ self.tgt_n_token = tgt_n_token
+ self.d_model = d_model
+ self.n_head = n_head
+ self.dim_feedforward = dim_feedforward
+ self.n_layers = n_layers
+
+ # encoder / decoder / linear
+ self.encoder = TransformerEncoder(src_n_token=src_n_token, d_model=d_model, n_head=n_head,
+ dim_feedforward=dim_feedforward, n_layers=n_layers)
+ self.decoder = TransformerDecoder(tgt_n_token=tgt_n_token, d_model=d_model, n_head=n_head,
+ dim_feedforward=dim_feedforward, n_layers=n_layers)
+
+ self.linear3d = Linear3D(in_features=d_model, out_features=tgt_n_token, bias=False)
+
+ self.soft_cross_entropy = layer.SoftMaxCrossEntropy()
+
+ def forward(self, enc_inputs, dec_inputs):
+ """
+ Args:
+ enc_inputs: [batch_size, src_len]
+ dec_inputs: [batch_size, tgt_len]
+
+ """
+ # enc_outputs: [batch_size, src_len, d_model],
+ # enc_self_attns: [n_layers, batch_size, n_heads, src_len, src_len]
+ enc_outputs, enc_self_attns = self.encoder(enc_inputs)
+
+ # dec_outputs: [batch_size, tgt_len, d_model]
+ # dec_self_attns: [n_layers, batch_size, n_heads, tgt_len, tgt_len]
+ # dec_enc_attn: [n_layers, batch_size, tgt_len, src_len]
+ dec_outputs, dec_self_attns, dec_enc_attns = self.decoder(dec_inputs, enc_inputs, enc_outputs)
+
+ # dec_logits: [batch_size, tgt_len, tgt_vocab_size]
+ dec_logits = self.linear3d(dec_outputs)
+ return dec_logits, enc_self_attns, dec_self_attns, dec_enc_attns
+
+ def train_one_batch(self, enc_inputs, dec_inputs, dec_outputs, pad):
+ out, _, _, _ = self.forward(enc_inputs, dec_inputs)
+ shape = out.shape[-1]
+ out = autograd.reshape(out, [-1, shape])
+
+ out_np = tensor.to_numpy(out)
+ preds_np = np.argmax(out_np, -1)
+
+ dec_outputs_np = tensor.to_numpy(dec_outputs)
+ dec_outputs_np = dec_outputs_np.reshape(-1)
+
+ y_label_mask = dec_outputs_np != pad
+ correct = preds_np == dec_outputs_np
+ acc = np.sum(y_label_mask * correct) / np.sum(y_label_mask)
+ dec_outputs = tensor.from_numpy(dec_outputs_np)
+
+ loss = self.soft_cross_entropy(out, dec_outputs)
+ self.opt(loss)
+ return out, loss, acc
+
+ def set_optimizer(self, opt):
+ self.opt = opt
+
+
+class TransformerDecoder(layer.Layer):
+ """TransformerDecoder is a stack of N decoder layers
+ Args:
+ tgt_n_token: the size of target vocab
+ d_model: the number of expected features in the decoder inputs (default=512).
+ n_head: the number of heads in the multi head attention models (default=8).
+ dim_feedforward: the dimension of the feedforward network model (default=2048).
+ n_layers: the number of sub-decoder-layers in the decoder (default=6).
+ """
+
+ def __init__(self, tgt_n_token, d_model=512, n_head=8, dim_feedforward=2048, n_layers=6):
+ super(TransformerDecoder, self).__init__()
+ self.tgt_n_token = tgt_n_token
+ self.d_model = d_model
+ self.n_head = n_head
+ self.dim_feedforward = dim_feedforward
+ self.n_layers = n_layers
+
+ # target_emb / pos_emb / n-layers
+ self.target_emb = layer.Embedding(input_dim=tgt_n_token, output_dim=d_model)
+ self.target_pos_emb = layer.Embedding(input_dim=tgt_n_token, output_dim=d_model)
+ self.layers = []
+ for _ in range(n_layers):
+ self.layers.append(TransformerDecoderLayer(d_model=d_model, n_head=n_head, dim_feedforward=dim_feedforward))
+
+ def forward(self, dec_inputs, enc_inputs, enc_outputs):
+ """
+ Args:
+ dec_inputs: [batch_size, tgt_len]
+ enc_inputs: [batch_size, src_len]
+ enc_outputs: [batch_size, src_len, d_model]
+
+ """
+
+ # [batch_size, tgt_len, d_model]
+ tgt_word_emb = self.target_emb(dec_inputs)
+ self.target_pos_emb.initialize(dec_inputs)
+ self.target_pos_emb.from_pretrained(W=TransformerDecoder._get_sinusoid_encoding_table(self.tgt_n_token, self.d_model),
+ freeze=True)
+ # [batch_size, tgt_len, d_model]
+ tgt_pos_emb = self.target_pos_emb(dec_inputs)
+ # [batch_size, tgt_len, d_model]
+ dec_outputs = autograd.add(tgt_word_emb, tgt_pos_emb)
+
+ # dec_self_attn_pad_mask [batch_size, tgt_len, tgt_len]
+ dec_self_attn_pad_mask = TransformerDecoder._get_attn_pad_mask(dec_inputs, dec_inputs)
+ # [batch_size, tgt_len, tgt_len]
+ dec_self_attn_subsequent_mask = TransformerDecoder._get_attn_subsequence_mask(dec_inputs)
+
+ # dec_self_attn_mask [batch_size, tgt_len, tgt_len]
+ dec_self_attn_mask = tensor.gt((dec_self_attn_pad_mask + dec_self_attn_subsequent_mask), 0)
+
+ # dec_enc_attn_mask [batch_size, tgt_len, src_len]
+ dec_enc_attn_mask = TransformerDecoder._get_attn_pad_mask(dec_inputs, enc_inputs)
+
+ dec_self_attns, dec_enc_attns = [], []
+
+ for layer in self.layers:
+ # dec_outputs: [batch_size, tgt_len, d_model],
+ # dec_self_attn: [batch_size, n_heads, tgt_len, tgt_len],
+ # dec_enc_attn: [batch_size, h_heads, tgt_len,src_len]
+ dec_outputs, dec_self_attn, dec_enc_attn = layer(dec_outputs, enc_outputs, dec_self_attn_mask,
+ dec_enc_attn_mask)
+ dec_self_attns.append(dec_self_attn)
+ dec_enc_attns.append(dec_enc_attn)
+ return dec_outputs, dec_self_attns, dec_enc_attns
+
+ @staticmethod
+ def _get_attn_pad_mask(seq_q, seq_k):
+ """
+ Args:
+ seq_q: [batch_size, seq_len]
+ seq_k: [batch_size, seq_len]
+ Returns:
+ [batch_size, seq_len, seq_len]
+ """
+
+ batch_size, len_q = seq_q.shape
+ batch_size, len_k = seq_k.shape
+ seq_k_np = tensor.to_numpy(seq_k)
+ pad_attn_mask_np = np.where(seq_k_np == 0, 1, 0)
+ pad_attn_mask_np.astype(np.int32)
+ pad_attn_mask_np = np.expand_dims(pad_attn_mask_np, axis=1)
+ pad_attn_mask_np = np.broadcast_to(pad_attn_mask_np, (batch_size, len_q, len_k))
+ pad_attn_mask_np = tensor.from_numpy(pad_attn_mask_np)
+ return pad_attn_mask_np
+
+ @staticmethod
+ def _get_attn_subsequence_mask(seq):
+ """
+ Args:
+ seq: [batch_size, tgt_len]
+
+ Returns:
+ """
+ attn_shape = [seq.shape[0], seq.shape[1], seq.shape[1]]
+
+ # generate the upper triangular matrix, [batch_size, tgt_len, tgt_len]
+ subsequence_mask = np.triu(np.ones(attn_shape), k=1)
+ subsequence_mask.astype(np.int32)
+ subsequence_mask = tensor.from_numpy(subsequence_mask)
+ return subsequence_mask
+
+ @staticmethod
+ def _get_sinusoid_encoding_table(n_position, d_model):
+ def cal_angle(position, hid_idx):
+ return position / np.power(10000, 2 * (hid_idx // 2) / d_model)
+
+ def get_posi_angle_vec(position):
+ return [cal_angle(position, hid_j) for hid_j in range(d_model)]
+
+ sinusoid_table = np.array([get_posi_angle_vec(pos_i) for pos_i in range(n_position)], np.float32)
+ sinusoid_table[:, 0::2] = np.sin(sinusoid_table[:, 0::2]) # Even bits use sine functions
+ sinusoid_table[:, 1::2] = np.cos(sinusoid_table[:, 1::2]) # Cosine function for odd digits
+ return tensor.Tensor(data=sinusoid_table, requires_grad=False)
+
+
+class TransformerDecoderLayer(layer.Layer):
+ def __init__(self, d_model=512, n_head=8, dim_feedforward=2048):
+ super(TransformerDecoderLayer, self).__init__()
+
+ self.d_model = d_model
+ self.n_head = n_head
+ self.dim_feedforward = dim_feedforward
+
+ self.dec_self_attn = MultiHeadAttention(d_model=d_model, n_head=n_head)
+ self.dec_enc_attn = MultiHeadAttention(d_model=d_model, n_head=n_head)
+ self.pos_ffn = PoswiseFeedForwardNet(d_model=d_model, dim_feedforward=dim_feedforward)
+
+ def forward(self, dec_inputs, enc_outputs, dec_self_attn_mask, dec_enc_attn_mask):
+ """
+ Args:
+ dec_inputs: [batch_size, tgt_len, d_model]
+ enc_outputs: [batch_size, src_len, d_model]
+ dec_self_attn_mask: [batch_size, tgt_len, tgt_len]
+ dec_enc_attn_mask: [batch_size, tgt_len, src_len]
+ """
+
+ # dec_outputs: [batch_size, tgt_len, d_model]
+ # dec_self_attn: [batch_size, n_heads, tgt_len, tgt_len]
+ dec_outputs, dec_self_attn = self.dec_self_attn(dec_inputs, dec_inputs, dec_inputs, dec_self_attn_mask)
+
+ # dec_outputs: [batch_size, tgt_len, d_model]
+ # dec_self_attn: [batch_size, n_heads, tgt_len, src_len]
+ dec_outputs, dec_enc_attn = self.dec_enc_attn(dec_outputs, enc_outputs, enc_outputs, dec_enc_attn_mask)
+ # [batch_size, tgt_len, d_model]
+ dec_outputs = self.pos_ffn(dec_outputs)
+ return dec_outputs, dec_self_attn, dec_enc_attn
+
+
+class TransformerEncoder(layer.Layer):
+ """TransformerEncoder is a stack of N encoder layers
+ Args:
+ src_n_token: the source vocab size
+ d_model: the number of expected features in the encoder inputs (default=512).
+ n_head: the number of heads in the multi head attention models (default=8).
+ dim_feedforward: the dimension of the feedforward network model (default=2048).
+ n_layers: the number of sub-encoder-layers in the encoder (default=6).
+ """
+
+ def __init__(self, src_n_token, d_model=512, n_head=8, dim_feedforward=2048, n_layers=6):
+ super(TransformerEncoder, self).__init__()
+ self.src_n_token = src_n_token
+ self.d_model = d_model
+ self.n_head = n_head
+ self.dim_feedforward = dim_feedforward
+ self.n_layers = n_layers
+
+ # input_emb / pos_emb / n-encoder layers
+ self.input_emb = layer.Embedding(input_dim=src_n_token, output_dim=d_model)
+ self.pos_emb = layer.Embedding(input_dim=src_n_token, output_dim=d_model)
+ self.layers = []
+ for _ in range(self.n_layers):
+ self.layers.append(TransformerEncoderLayer(d_model=d_model, n_head=n_head, dim_feedforward=dim_feedforward))
+
+ def forward(self, enc_inputs):
+ """Pass the input through the encoder in turn.
+ Args:
+ enc_inputs: the sequence to the encoder (required). [batch_size, src_len]
+ """
+ # [batch_size, src_len, d_model]
+ word_emb = self.input_emb(enc_inputs)
+
+ self.pos_emb.initialize(enc_inputs)
+ self.pos_emb.from_pretrained(W=TransformerEncoder._get_sinusoid_encoding_table(self.src_n_token, self.d_model), freeze=True)
+ # [batch_size, src_len, d_model]
+ pos_emb = self.pos_emb(enc_inputs)
+ # enc_outputs [batch_size, src_len, d_model]
+ enc_outputs = autograd.add(word_emb, pos_emb)
+
+ # enc_self_attn_mask [batch_size, src_len, src_len]
+ enc_self_attn_mask = TransformerEncoder._get_attn_pad_mask(enc_inputs, enc_inputs)
+
+ enc_self_attns = []
+ for layer in self.layers:
+ enc_outputs, enc_self_attn = layer(enc_outputs, enc_self_attn_mask)
+ enc_self_attns.append(enc_self_attn)
+ return enc_outputs, enc_self_attns
+
+ @staticmethod
+ def _get_attn_pad_mask(seq_q, seq_k):
+ """
+ Args:
+ seq_q: [batch_size, seq_len]
+ seq_k: [batch_size, seq_len]
+ Returns: [batch_size, seq_len, seq_len]
+ """
+ batch_size, len_q = seq_q.shape
+ batch_size, len_k = seq_k.shape
+ seq_k_np = tensor.to_numpy(seq_k)
+ pad_attn_mask_np = np.where(seq_k_np == 0, 1, 0)
+ pad_attn_mask_np.astype(np.int32)
+ pad_attn_mask_np = np.expand_dims(pad_attn_mask_np, axis=1)
+ pad_attn_mask_np = np.broadcast_to(pad_attn_mask_np, (batch_size, len_q, len_k))
+ pad_attn_mask_np = tensor.from_numpy(pad_attn_mask_np)
+ return pad_attn_mask_np
+
+ @staticmethod
+ def _get_sinusoid_encoding_table(n_position, d_model):
+ def cal_angle(position, hid_idx):
+ return position / np.power(10000, 2 * (hid_idx // 2) / d_model)
+
+ def get_posi_angle_vec(position):
+ return [cal_angle(position, hid_j) for hid_j in range(d_model)]
+
+ sinusoid_table = np.array([get_posi_angle_vec(pos_i) for pos_i in range(n_position)], np.float32)
+ sinusoid_table[:, 0::2] = np.sin(sinusoid_table[:, 0::2])
+ sinusoid_table[:, 1::2] = np.cos(sinusoid_table[:, 1::2])
+ return tensor.Tensor(data=sinusoid_table, requires_grad=False)
+
+
+class TransformerEncoderLayer(layer.Layer):
+ def __init__(self, d_model=512, n_head=8, dim_feedforward=2048):
+ super(TransformerEncoderLayer, self).__init__()
+ self.d_model = d_model
+ self.n_head = n_head
+ self.dim_feedforward = dim_feedforward
+ self.enc_self_attn = MultiHeadAttention(d_model, n_head)
+ self.pos_ffn = PoswiseFeedForwardNet(d_model=d_model, dim_feedforward=dim_feedforward, bias=False)
+
+ def forward(self, enc_inputs, enc_self_attn_mask):
+ """
+ Args:
+ enc_inputs: [batch_size, src_len, d_model]
+ enc_self_attn_mask: [batch_size, src_len, src_len]
+
+ Returns:
+ enc_outputs: [batch_size, src_len, d_model]
+ attn: [batch_size, n_heads, src_len, src_len]
+ """
+ # enc_inputs to same Q,K,V
+ enc_outputs, attn = self.enc_self_attn(enc_inputs, enc_inputs, enc_inputs, enc_self_attn_mask)
+ enc_outputs = self.pos_ffn(enc_outputs)
+ return enc_outputs, attn
+
+
+def matmul4d(x1, x2):
+ batchs, heads = x1.shape[0], x1.shape[1]
+ ys = []
+ for b in range(batchs):
+ x1b, x2b = autograd.squeeze(x1[b]), autograd.squeeze(x2[b])
+ yb = []
+ for h in range(heads):
+ x1h, x2h = autograd.squeeze(x1b[h]), autograd.squeeze(x2b[h])
+ yh = autograd.matmul(x1h, x2h)
+ yh = autograd.unsqueeze(yh, axis=[0])
+ yb.append(yh)
+ yb = autograd.cat(yb, axis=0)
+ yb = autograd.unsqueeze(yb, axis=[0])
+ ys.append(yb)
+ y = autograd.cat(ys, axis=0)
+ return y
+
+
+class MultiHeadAttention(layer.Layer):
+ def __init__(self, d_model=512, n_head=8):
+ super(MultiHeadAttention, self).__init__()
+ self.d_k = d_model // n_head
+ assert (
+ self.d_k * n_head == d_model
+ ), "embed_dim must be divisible by num_heads"
+ self.d_model = d_model
+ self.d_v = self.d_k
+ self.n_head = n_head
+ self.W_Q = Linear3D(d_model, self.d_k * n_head)
+ self.W_K = Linear3D(d_model, self.d_k * n_head)
+ self.W_V = Linear3D(d_model, self.d_v * n_head)
+
+ self.scaled_dot_product_attention = ScaledDotProductAttention(d_model, n_head)
+ self.linear = Linear3D(self.d_v * n_head, d_model)
+ self.add = layer.Add()
+ self.layer_norm = LayerNorm(d_model)
+
+ def forward(self, query, key, value, attn_mask):
+ """
+ Args:
+ query: [batch_size, len_q, d_model]
+ key: [batch_size, len_k, d_model]
+ value: [batch_size, len_v(=len_k), d_model]
+ attn_mask: [batch_size, seq_len, seq_len]
+ Returns:
+ """
+ residual = query
+ batch_size = query.shape[0]
+
+ # (B, S, D) -proj-> (B, S, D_new) -split-> (B, S, H, W) -trans-> (B, H, S, W)
+ Q = self.W_Q(query)
+ Q = autograd.reshape(Q, [batch_size, -1, self.n_head, self.d_k])
+ Q = autograd.transpose(Q, [0, 2, 1, 3])
+
+ K = self.W_K(key)
+ K = autograd.reshape(K, [batch_size, -1, self.n_head, self.d_k])
+ K = autograd.transpose(K, [0, 2, 1, 3])
+
+ V = self.W_V(value)
+ V = autograd.reshape(V, [batch_size, -1, self.n_head, self.d_v])
+ V = autograd.transpose(V, [0, 2, 1, 3])
+
+ # Q: [batch_size, n_heads, len_q, d_k]
+ # K: [batch_size, n_heads, len_k, d_k]
+ # V: [batch_size, n_heads, len_v(=len_k), d_v]
+
+ # attn_mask : [batch_size, n_heads, seq_len, seq_len]
+ attn_mask = MultiHeadAttention._get_attn_mask(attn_mask, self.n_head)
+
+ # context: [batch_size, n_heads, len_q, d_v]
+ # attn: [batch_size, n_heads, seq_len, seq_len]
+ context, attn = self.scaled_dot_product_attention(Q, K, V, attn_mask)
+ context = autograd.transpose(context, [0, 2, 1, 3])
+ # context: [batch_size, len_q, n_heads * d_v]
+ context = autograd.reshape(context, [batch_size, -1, self.n_head * self.d_v])
+
+ output = self.linear(context)
+ output = self.add(output, residual)
+ # [batch_size, len_q, d_model]
+ output = self.layer_norm(output)
+ return output, attn
+
+ @staticmethod
+ def _get_attn_mask(attn_mask, n_head):
+ batch_size, seq_q_len,seq_k_len = attn_mask.shape[0], attn_mask.shape[1], attn_mask.shape[2]
+ attn_mask_np = tensor.to_numpy(attn_mask)
+ attn_mask_np = np.expand_dims(attn_mask_np, axis=1)
+ attn_mask_np = np.broadcast_to(attn_mask_np, (batch_size, n_head, seq_q_len, seq_k_len))
+ return tensor.from_numpy(attn_mask_np)
+
+
+class ScaledDotProductAttention(layer.Layer):
+ def __init__(self, d_model=512, n_head=8):
+ super(ScaledDotProductAttention, self).__init__()
+ self.d_k = d_model // n_head
+ assert (
+ self.d_k * n_head == d_model
+ ), "embed_dim must be divisible by num_heads"
+
+ def forward(self, query, key, value, attn_mask):
+ """
+ Args:
+ query: [batch_size, n_heads, len_q, d_k]
+ key: [batch_size, n_heads, len_k, d_k]
+ value: [batch_size, n_heads, len_v(=len_k), d_v]
+ attn_mask: [batch_size, n_heads, seq_len, seq_len]
+ Returns:
+ """
+
+ K_trans = autograd.transpose(key, [0, 1, 3, 2])
+
+ # scores : [batch_size, n_heads, len_q, len_k]
+ # query [batch_size, n_heads, len_q, d_k]
+ # k^T [batch_size, n_heads, d_k, len_k]
+ scores = matmul4d(query, K_trans)
+ d_k_sqrt = Tensor(shape=(1,), requires_grad=False, stores_grad=False)
+ d_k_sqrt.set_value(np.sqrt(self.d_k))
+ scores = autograd.div(scores, d_k_sqrt)
+
+ mask_fill = Tensor(shape=attn_mask.shape, data=np.full(attn_mask.shape, -1e6, dtype=np.float32), requires_grad=False, stores_grad=False)
+ attn_mask_np = tensor.to_numpy(attn_mask)
+ scores = autograd.where(mask_fill, scores, attn_mask_np)
+
+ attn = autograd.softmax(scores, axis=-1)
+ # context: [batch_size, n_heads, len_q, d_v]
+ # attn: [batch_size, n_heads, len_q, len_k] value: [batch_size, n_heads, len_v(=len_k), d_v]
+ context = matmul4d(attn, value)
+ return context, attn
+
+
+class PoswiseFeedForwardNet(layer.Layer):
+ def __init__(self, d_model=512, dim_feedforward=2048, bias=False):
+ super(PoswiseFeedForwardNet, self).__init__()
+
+ self.d_model = d_model
+ self.dim_feedforward = dim_feedforward
+ self.bias = bias
+
+ self.linear1 = Linear3D(d_model, dim_feedforward, bias=bias)
+ self.relu = layer.ReLU()
+ self.linear2 = Linear3D(dim_feedforward, d_model, bias=bias)
+ self.add = layer.Add()
+ self.norm = LayerNorm(d_model)
+
+ def forward(self, inputs):
+ # inputs: [batch_size, seq_len, d_model]
+ residual = inputs
+ output = self.linear1(inputs)
+ output = self.relu(output)
+ output = self.linear2(output)
+ # [batch_size, seq_len, d_model]
+ output = self.add(output, residual)
+ output = self.norm(output)
+ return output
+
+
+class LayerNorm(layer.Layer):
+ def __init__(self, n_features, eps=1e-6):
+ super(LayerNorm, self).__init__()
+ self.n_features = n_features
+ self.eps = eps
+
+ def initialize(self, x):
+ shape = (self.n_features,)
+ self.Gamma = Tensor(shape=shape, dtype=x.dtype, requires_grad=False, stores_grad=False)
+ self.Beta = Tensor(shape=shape, dtype=x.dtype, requires_grad=False, stores_grad=False)
+ self.Gamma.set_value(1.0)
+ self.Beta.set_value(0.0)
+
+ def forward(self, x):
+ # x: input tensor with shape [batch_size, n_features]
+ # x_normalized = (x - tensor.from_numpy(self.mean)) / tensor.from_numpy(np.sqrt(self.var + self.eps))
+ # y = self.gamma * x_normalized + self.beta
+ mean = np.mean(tensor.to_numpy(x), axis=-1, keepdims=True)
+ var = np.var(tensor.to_numpy(x), axis=-1, keepdims=True)
+
+ sub1 = tensor.from_numpy(mean)
+ div1 = tensor.from_numpy(np.sqrt(var + self.eps))
+ x_normalized = autograd.div(autograd.sub(x, sub1), div1)
+ y = autograd.mul(self.Gamma, x_normalized)
+ y = autograd.add(y, self.Beta)
+ return y
+
+
+class Linear3D(layer.Layer):
+ """
+ Generate a Linear3D operator
+ """
+
+ # TODO: replace current with
+ # def __init__(self, out_features, bias=True):
+ def __init__(self, out_features, *args, bias=False, **kwargs):
+ """
+ Args:
+ ut_channels: int, the channel of output, also is the number of
+ filters
+ bias: bool
+ """
+ super(Linear3D, self).__init__()
+ self.out_features = out_features
+
+ # TODO: for backward compatibility, to remove
+ if len(args) > 0:
+ self.in_features = out_features
+ self.out_features = args[0]
+ if len(args) > 1:
+ self.bias = args[1]
+ else:
+ self.bias = bias
+
+ def initialize(self, x):
+ self.in_features = x.shape[-1]
+ w_shape = (self.in_features, self.out_features)
+ b_shape = (self.out_features,)
+
+ self.W = Tensor(shape=w_shape,
+ dtype=x.dtype,
+ requires_grad=True,
+ stores_grad=True)
+ std = math.sqrt(2.0 / (self.in_features + self.out_features))
+ self.W.gaussian(0.0, std)
+
+ if self.bias:
+ self.b = Tensor(shape=b_shape,
+ dtype=x.dtype,
+ requires_grad=True,
+ stores_grad=True)
+ self.b.set_value(0.0)
+ else:
+ self.b = None
+
+ def forward(self, x):
+ if self.b:
+ self.device_check(x, self.W, self.b)
+ self.dtype_check(x, self.W, self.b)
+ else:
+ self.device_check(x, self.W)
+ self.dtype_check(x, self.W)
+
+ assert x.shape[-1] == self.W.shape[0], (
+ "Linear3D layer expects input features size %d received %d" %
+ (self.W.shape[0], x.shape[-1]))
+
+ ys = []
+ batch = x.shape[0]
+ for i in range(batch):
+ xi = autograd.squeeze(x[i])
+ yi = autograd.matmul(xi, self.W)
+ if self.bias:
+ yi = autograd.add_bias(yi, self.b, axis=0)
+ yi = autograd.unsqueeze(yi, axis=[0])
+ ys.append(yi)
+ y = autograd.cat(ys, axis=0)
+ return y
+
+ def get_params(self):
+ if self.bias:
+ return {self.W.name: self.W, self.b.name: self.b}
+ else:
+ return {self.W.name: self.W}
+
+ def set_params(self, parameters):
+ self.W.copy_from(parameters[self.W.name])
+ if self.bias:
+ self.b.copy_from(parameters[self.b.name])
diff --git a/examples/trans/run.sh b/examples/trans/run.sh
new file mode 100644
index 0000000..3e7e11b
--- /dev/null
+++ b/examples/trans/run.sh
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# run this example
+python train.py --dataset cmn-2000.txt --max-epoch 300 --batch-size 32 --lr 0.01
\ No newline at end of file
diff --git a/examples/trans/train.py b/examples/trans/train.py
new file mode 100644
index 0000000..9953120
--- /dev/null
+++ b/examples/trans/train.py
@@ -0,0 +1,167 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import random
+import time
+import argparse
+import numpy as np
+from singa import device
+from singa import tensor
+from singa import opt
+from model import Transformer
+import matplotlib.pyplot as plt
+from data import CmnDataset
+
+
+def run(args):
+ dev = device.create_cpu_device()
+ dev.SetRandSeed(args.seed)
+ np.random.seed(args.seed)
+
+ batch_size = args.batch_size
+ cmn_dataset = CmnDataset(path="cmn-eng/"+args.dataset, shuffle=args.shuffle, batch_size=batch_size, train_ratio=0.8)
+
+ print("【step-0】 prepare dataset...")
+ src_vocab_size, tgt_vocab_size = cmn_dataset.en_vab_size, cmn_dataset.cn_vab_size
+ src_len, tgt_len = cmn_dataset.src_max_len+1, cmn_dataset.tgt_max_len+1
+ pad = cmn_dataset.cn_vab["<pad>"]
+ # train set
+ train_size = cmn_dataset.train_size
+ train_max_batch = train_size // batch_size
+ if train_size % batch_size > 0:
+ train_max_batch += 1
+
+ # test set
+ test_size = cmn_dataset.test_size
+ test_max_batch = test_size // batch_size
+ if test_size % batch_size > 0:
+ test_max_batch += 1
+ print("【step-0】 src_vocab_size: %d, tgt_vocab_size: %d, src_max_len: %d, tgt_max_len: %d, "
+ "train_size: %d, test_size: %d, train_max_batch: %d, test_max_batch: %d" %
+ (src_vocab_size, tgt_vocab_size, src_len, tgt_len, train_size, test_size, train_max_batch, test_max_batch))
+
+ print("【step-1】 prepare transformer model...")
+ model = Transformer(src_n_token=src_vocab_size,
+ tgt_n_token=tgt_vocab_size,
+ d_model=args.d_model,
+ n_head=args.n_head,
+ dim_feedforward=args.dim_feedforward,
+ n_layers=args.n_layers)
+
+ optimizer = opt.SGD(lr=args.lr, momentum=0.9, weight_decay=1e-5)
+ model.set_optimizer(optimizer)
+ print("【step-1】 src_n_token: %d, tgt_n_token: %d, d_model: %d, n_head: %d, dim_feedforward: %d, n_layers: %d, lr: %f"
+ % (src_vocab_size, tgt_vocab_size, args.d_model, args.n_head, args.dim_feedforward, args.n_layers, args.lr))
+
+ tx_enc_inputs = tensor.Tensor((batch_size, src_len), dev, tensor.int32,
+ np.zeros((batch_size, src_len), dtype=np.int32))
+ tx_dec_inputs = tensor.Tensor((batch_size, tgt_len), dev, tensor.int32,
+ np.zeros((batch_size, tgt_len), dtype=np.int32))
+ ty_dec_outputs = tensor.Tensor((batch_size, tgt_len), dev, tensor.int32,
+ np.zeros((batch_size, tgt_len), dtype=np.int32))
+ # model.compile([tx_enc_inputs, tx_dec_inputs], is_train=True)
+
+ print("【step-2】 training start...")
+ train_epoch_avg_loss_history = []
+ train_epoch_avg_acc_history = []
+ test_epoch_avg_acc_history = []
+ for epoch in range(args.max_epoch):
+ # ok = input("Train[Yes/No]")
+ # if ok == "No":
+ # break
+ model.train()
+ model.graph(mode=False, sequential=False)
+ train_epoch_total_loss = 0
+ train_epoch_total_acc = 0.0
+ print("【Train epoch %d】 Start..." % epoch)
+ start_time = time.time()
+ for bat in range(train_max_batch):
+ x_enc_inputs, x_dec_inputs, y_dec_outputs = cmn_dataset.get_batch_data(batch=bat, mode='train')
+ tx_enc_inputs.copy_from_numpy(x_enc_inputs)
+ tx_dec_inputs.copy_from_numpy(x_dec_inputs)
+ ty_dec_outputs.copy_from_numpy(y_dec_outputs)
+ out, loss, acc = model(tx_enc_inputs, tx_dec_inputs, ty_dec_outputs, pad)
+ loss_np = tensor.to_numpy(loss)
+ batch_loss = loss_np[0]
+ train_epoch_total_loss += batch_loss
+ train_epoch_total_acc += acc
+ if bat % 5 == 0:
+ end_time = time.time()
+ print("[Train epoch-%d] [%d/%d] batch loss: [%.6f], acc: [%.3f %%] time:[%.6fs]" %
+ (epoch, bat, train_max_batch, batch_loss, acc*100.0, end_time-start_time))
+ start_time = time.time()
+ train_epoch_avg_loss = train_epoch_total_loss / train_max_batch
+ train_epoch_avg_acc = train_epoch_total_acc / train_max_batch
+ train_epoch_avg_loss_history.append(train_epoch_avg_loss)
+ train_epoch_avg_acc_history.append(train_epoch_avg_acc)
+ print("[Train epoch-%d] avg loss: [%.6f], avg acc: [%.3f %%]" % (epoch, train_epoch_avg_loss, train_epoch_avg_acc*100.0))
+ print("【Train Epoch %d】 End" % (epoch))
+ # eval
+ model.eval()
+ print("【Test Eval】 Start...")
+ avg_acc = 0.0
+ for bat in range(test_max_batch):
+ x_enc_inputs, x_dec_inputs, y_dec_outputs = cmn_dataset.get_batch_data(batch=bat, mode='test')
+ tx_enc_inputs.copy_from_numpy(x_enc_inputs)
+ tx_dec_inputs.copy_from_numpy(x_dec_inputs)
+ # ty_dec_outputs.copy_from_numpy(y_dec_outputs)
+ # y_dec_outputs [batch_size, tgt_len]
+ # out [batch_size, tgt_len, tgt_vocab_size]
+ out, _, _, _ = model(tx_enc_inputs, tx_dec_inputs)
+ out_np = tensor.to_numpy(out)
+ out_np = np.reshape(out_np, (-1, out_np.shape[-1]))
+ pred_np = np.argmax(out_np, -1)
+ y_dec_outputs = np.reshape(y_dec_outputs, -1)
+ y_label_mask = y_dec_outputs != pad
+ correct = pred_np == y_dec_outputs
+ acc = np.sum(y_label_mask * correct) / np.sum(y_label_mask)
+ avg_acc += acc
+ avg_acc = avg_acc / test_max_batch
+ test_epoch_avg_acc_history.append(avg_acc)
+ print("[Test epoch-%d] avg acc: %.3f %%" % (epoch, avg_acc*100.0))
+ print("【Test Eval】 End...")
+ plt.subplot(2, 1, 1)
+ plt.plot(train_epoch_avg_loss_history, 'r-', label="train loss")
+ plt.legend()
+
+ plt.subplot(2, 1, 2)
+ plt.plot(train_epoch_avg_acc_history, 'r-', label="train acc")
+ plt.plot(test_epoch_avg_acc_history, 'b-', label="test acc")
+ plt.legend()
+ plt.show()
+ timestamp = time.time()
+ plt.savefig("batch_train_loss" + str(timestamp).replace(".", "_") + ".png")
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description="Training Transformer Model.")
+ parser.add_argument('--dataset', choices=['cmn.txt', 'cmn-15000.txt',
+ 'cmn-2000.txt'], default='cmn-2000.txt')
+ parser.add_argument('--max-epoch', default=100, type=int, help='maximum epochs.', dest='max_epoch')
+ parser.add_argument('--batch-size', default=64, type=int, help='batch size', dest='batch_size')
+ parser.add_argument('--shuffle', default=True, type=bool, help='shuffle the dataset', dest='shuffle')
+ parser.add_argument('--lr', default=0.005, type=float, help='learning rate', dest='lr')
+ parser.add_argument('--seed', default=0, type=int, help='random seed', dest='seed')
+ parser.add_argument('--d_model', default=512, type=int, help='transformer model d_model', dest='d_model')
+ parser.add_argument('--n_head', default=8, type=int, help='transformer model n_head', dest='n_head')
+ parser.add_argument('--dim_feedforward', default=2048, type=int, help='transformer model dim_feedforward', dest='dim_feedforward')
+ parser.add_argument('--n_layers', default=6, type=int, help='transformer model n_layers', dest='n_layers')
+ args = parser.parse_args()
+ print(args)
+ run(args)
diff --git a/java/pom.xml b/java/pom.xml
index 7f40b2d..82976f9 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -108,6 +108,7 @@
<exclude>examples/model_selection/Trails/internal/pg_extension/template/Cargo.pg11.toml</exclude>
<exclude>examples/model_selection/Trails/documents/ai_db.001.jpeg</exclude>
<exclude>examples/singa_easy/examples/data/SampleQuestion.json</exclude>
+ <exclude>examples/trans/cmn-eng/cmn-2000.txt</exclude>
</excludes>
<consoleOutput>True</consoleOutput>
</configuration>
diff --git a/setup.py b/setup.py
index c057b78..a7811c7 100644
--- a/setup.py
+++ b/setup.py
@@ -83,7 +83,7 @@
from datetime import date
# stable version
-VERSION = '4.2.0'
+VERSION = '4.3.0'
# get the git hash
# git_hash = subprocess.check_output(["git", "describe"]).strip().split('-')[-1][1:]
# comment the next line to build wheel for stable version
diff --git a/tool/conda/singa/meta.yaml b/tool/conda/singa/meta.yaml
index a3428a5..e8e2fcc 100644
--- a/tool/conda/singa/meta.yaml
+++ b/tool/conda/singa/meta.yaml
@@ -20,7 +20,7 @@
# https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#templating-with-jinja
# {% set data = load_setup_py_data(setup_file='../../../python/singa/setup.py', from_recipe_dir=True) %}
-{% set version = "4.2.0" %}
+{% set version = "4.3.0" %}
package:
name: singa