句子建模

更新时间:2022-12-08 10:56:43作者:未知

你有没有想过 Gmail 自动回复是如何进行的?或者手机在你输入文本时如何对下一个词提出建议?生成文本序列的通常方式是训练模型在给定所有先前词/字符的条件下预测下一个词/字符出现的概率。此类模型叫作统计语言模型,这种模型会尝试捕捉训练文本的统计结构,本文从字符级语言模型和名字预测出发向读者介绍了语言建模的核心概念。

句子建模

循环神经网络(RNN)模型常用于训练这种语言模型,因为它们使用高维隐藏状态单元处理信息的能力非常强大,建模长期依赖关系的能力也非常强。任意语言模型的主要目的都是学习训练文本中字符/单词序列的联合概率分布,即尝试学习联合概率函数。例如,如果我们试图预测一个包含 T 个词的单词序列,那么我们试图获取令联合概率 P(w_1, w_2, …, w_T) 最大的词序列,等价于所有时间步 (t) 上条件概率的累乘:

本文描述了字符级的语言模型,其中几乎所有概念都适用于其它语言模型,如单词级的语言模型等。字符级语言模型的主要任务是根据之前的所有字符预测下一个字符,即逐个字符地生成文本内容。更正式地来说,给出训练序列 (x^1,…,x^T),RNN 使用输出向量序列 (o^1,…,o^T) 来获取预测分布 P(x^t|x^t1)=softmax(o^t)。

下面我用我的姓氏(imad)为例介绍字符级语言模型的运行过程(该示例的详情见图 2)。

1. 我们首先用语料库中所有名字的字母(去掉重复的字母)作为关键词构建一个词汇词典,每个字母的索引从 0 开始(因为 Python 的索引也是从零开始),按升序排列。以 imad 为例,词汇词典应该是:{「a」: 0,「d」: 1,「i」: 2,「m」: 3}。因此,imad 就变成整数列表:[2, 3, 0, 1]。

2. 使用词汇词典将输入和输出字符转换成整型数列。本文中,我们假设所有示例中

。因此,y=「imad」,

。换言之,x^t+1=y^t,y=[2,3,0,1],

3. 对于输入中的每一个字符:

将输入字符转换成 one-hot 向量。注意第一个字符

的转换过程。计算隐藏状态层。计算输出层,然后将计算结果传入 softmax 层,获得的结果就是概率。把时间步 (t) 的目标字符作为时间步 (t+1) 的输入字符。返回步骤 a,重复该过程,直到结束名字中的所有字母。

模型的目标是使概率分布层中的绿色数值尽可能大,红色数值尽可能小。原因在于概率趋近于 1 时,真正的索引具备最高的概率。我们可以使用交叉熵来评估损失,然后计算损失函数关于所有参数损失的梯度,并根据与梯度相反的方向更新参数。不断重复该过程并迭代地调整参数,这样模型就能够使用训练集中的所有名字,根据之前的字符预测后一个字符。注意:隐藏状态 h^4 具备所有之前字符的信息。

图 2:使用 RNN 的字符级语言模型图示。

注意:为简洁起见,我删除了所有 Python 函数的文档注释,也没有包含一些无益于理解主要概念的函数。

notebook 和 script 地址:https://nbviewer.jupyter.org/github/ImadDabbura/blog-posts/blob/master/notebooks/Character-LeveL-Language-Model.ipynb

https://github.com/ImadDabbura/blog-posts/blob/master/scripts/character_level_language_model.py

训练

我们使用的数据集有 5163 个名字:4275 个男性名字,以及 1219 个女性名字,其中有 331 个名字是中性的。我们将使用多对多的 RNN 架构来训练字符级语言模型,其中输入(T_x)的时间步等于输出(T_y)的时间步。换句话说,输入和输出的序列是同步的(详见图 3)。

数据集地址:http://deron.meranda.us/data/census-derived-all-first.txt

图 3:多对多的 RNN 架构。

该字符级语言模型将在名字数据集上训练,然后我们可以使用该模型生成一些有趣的名字。

在这一节中,我们将介绍 4 个主要内容:

1 前向传播

2 反向传播

3 采样

4 拟合模型

前向传播

我们将使用随机梯度下降(SGD),其中每个 Batch 只包含一个样本。也就是说,RNN 模型将从每个样本(名字)中分别进行学习,即在每个样本上运行前向和反向传播,并据此更新参数。以下是前向传播所需步骤:

使用全部小写字母(无重复)构建词汇词典:创建不同字符的索引词典,使每个字符以升序对应索引。例如,a 的索引是 1(因为 Python 的索引是从 0 开始,我们将把 0 索引保存为 EOS「\n」),z 的索引是 26。我们将使用该词典将名字转换成整数列表,其中的每个字母都用 one-hot 向量来表示。创建一个字符词典的索引,使索引映射至字符。该词典将用于将 RNN 模型的输出转换为字符,然后再翻译成名字。初始化参数:将权重初始化为从标准正态分布中采样的较小随机数值,以打破对称性,确保不同的隐藏单元学习不同的事物。另外,偏置项也要初始化为 0。W_hh:权重矩阵,连接前一个隐藏状态 h^t1 和当前的隐藏状态 h^t。W_xh:权重矩阵,连接输入 x^t 和隐藏状态 h^t。b:隐藏状态偏置项向量。W_hy:权重矩阵,连接隐藏状态 h^t 与输出 o^t。c:输出偏置项向量。将输入 x^t 和输出 y^t 分别转换成 one-hot 向量:one-hot 向量的维度是 vocab_size x 1,除了在字符处的索引是 1,其他都是 0。在我们的案例中,x^t 和 y^t 一样需要向左移一步

。例如,如果我们使用「imad」作为输入,那么 y=[3,4,1,2,0],

。注意:

,索引不是 0。此外,我们还使用「\n」作为每个名字的 EOS(句子/名字末尾),这样 RNN 可以将「\n」学习为任意其它字符。这会帮助网络学习什么时候停止生成字符。因此,所有名字的最后一个目标字符都将是表示名字末尾的「\n」。使用以下公式计算隐藏状态:

注意我们使用双曲正切

作为非线性函数。主要优势是双曲正切函数在一定范围内近似于恒等函数。

用以下公式计算输出层:

将输出传输至 softmax 层,以归一化输出,这样我们可以将它表达为概率,即所有输出都在 0 和 1 之间,总和为 1。以下是 softmax 公式:

softmax 层和输出层的维度相同,都是 vocab_size x 1。因此,y^t[i] 表示时间步 (t) 下索引 i 对应字符为预测字符的概率。

如前所述,字符级语言模型的目标是最小化训练序列的负对数似然。因此,时间步 (t) 的损失函数和所有时间步的总损失为:

由于我们使用 SGD,因此损失函数的一阶导作为下降方向会带有噪声,且会存在振荡现象,因此使用指数加权平均法消除噪声是一个不错的方法。

将目标字符 y^t 作为下一个输入 x^t+1,直到完成该序列。

# Load packagesimport osimport numpy as np os.chdir("../scripts/")from character_level_language_model import (initialize_parameters, initialize_rmsprop, softmax, smooth_loss, update_parameters_with_rmsprop) def rnn_forward(x, y, h_prev, parameters): """Implement one Forward pass on one name.""" # Retrieve parameters Wxh, Whh, b = parameters["Wxh"], parameters["Whh"], parameters["b"] Why, c = parameters["Why"], parameters["c"] # Initialize inputs, hidden state, output, and probabilities dictionaries xs, hs, os, probs = {}, {}, {}, {} # Initialize x0 to zero vector xs[0] = np.zeros((vocab_size, 1)) # Initialize loss and assigns h_prev to last hidden state in hs loss = 0 hs[-1] = np.copy(h_prev) # Forward pass: loop over all characters of the name for t in range(len(x)): # Convert to one-hot vector if t > 0: xs[t] = np.zeros((vocab_size, 1)) xs[t][x[t]] = 1 # Hidden state hs[t] = np.tanh(np.dot(Wxh, xs[t]) + np.dot(Whh, hs[t - 1]) + b) # Logits os[t] = np.dot(Why, hs[t]) + c # Probs probs[t] = softmax(os[t]) # Loss loss -= np.log(probs[t][y[t], 0]) cache = (xs, hs, probs) return loss, cache

反向传播

在基于 RNN 的模型上使用的基于梯度的技术被称为随时间的反向传播(Backpropagation Through Time,BPTT)。我们从最后的时间步 T 开始,计算关于全部时间步的所有参数的反向传播梯度,并将它们都加起来(如图 4 所示)。

图 4:随时间的反向传播(BPTT)。

此外,由于已知 RNN 有很陡峭的梯度变化,梯度可能会突然变得非常大然后使原来训练得到的进展功亏一篑,即使使用了适应性学习方法如 RMSProp。其原因是梯度是损失函数的线性近似,可能无法捕捉在评估的点之外的其它信息,例如损失曲面的曲率。因此,通常在实践中会将梯度限制在 [-maxValue, maxValue] 区间内。在这里,我们将把梯度限制在 [-5,5] 上。这意味着如果梯度小于-5 或者大于 5,它将分别被截断为-5 和 5。以下是所有时间步上用于计算损失函数对所有参数的梯度所需的公式。

注意,在最后的时间步 T,我们将初始化 dh_next 为 0,因为其无法在未来得到任何更新值。由于 SGD 可能存在很多振荡,为了在每个时间步稳定更新过程,我们将使用其中一种适应性学习率的优化方法。具体来说,我们将使用 RMSProp,该方法能够获得可接受的性能。

def clip_gradients(gradients, max_value):""" Implements gradient clipping element-wise on gradients to be between the interval [-max_value, max_value]. """ for grad in gradients.keys(): np.clip(gradients[grad], -max_value, max_value, out=gradients[grad]) return gradients def rnn_backward(y, parameters, cache): Implements Backpropagation on one name. # Retrieve xs, hs, and probs xs, hs, probs = cache # Initialize all gradients to zero dh_next = np.zeros_like(hs[0]) parameters_names = ["Whh", "Wxh", "b", "Why", "c"] grads = {} for param_name in parameters_names: grads["d" + param_name] = np.zeros_like(parameters[param_name]) # Iterate over all time steps in reverse order starting from Tx for t in reversed(range(len(xs))): dy = np.copy(probs[t]) dy[y[t]] -= 1 grads["dWhy"] += np.dot(dy, hs[t].T) grads["dc"] += dy dh = np.dot(parameters["Why"].T, dy) + dh_next dhraw = (1 - hs[t] ** 2) * dh grads["dWhh"] += np.dot(dhraw, hs[t - 1].T) grads["dWxh"] += np.dot(dhraw, xs[t].T) grads["db"] += dhraw dh_next = np.dot(parameters["Whh"].T, dhraw) # Clip the gradients using [-5, 5] as the interval grads = clip_gradients(grads, 5) # Get the last hidden state h_prev = hs[len(xs) - 1] return grads, h_prev

采样

正是采样过程使得用 RNN 在每个时间步生成的文本变得有趣和有创造性。在每个时间步 (t),给定所有的已有字符,RNN 可输出下一个字符的条件概率分布,即 P(c_t|c_1,c_2,…,c_t1)。假设我们在时间步 t=3,并尝试预测第三个字符,其条件概率分布为 P(c_3/c_1,c_2)=(0.2,0.3,0.4,0.1)。其中有两种极端情况:

最大熵:字符会使用均匀概率分布进行选取;这意味着词汇表中的所有字符都是同等概率的。因此,我们最终将在选取下一个字符的过程中达到最大随机性,而生成的文本也不会有意义。最小熵:在每个时间步,拥有最高条件概率的字符将会被选取。这意味着下一个字符的选取将基于训练中的文本和已学习的参数。因此,生成的命名将是有意义的和有真实性的。

随着随机性的增大,文本将逐渐失去局部结构;然而,随着随机性的减小,生成的文本将变得更具真实性,并逐渐开始保留其局部结构。在这里,我们将从模型生成的分布中采样,该分布可被视为具有最大熵和最小熵之间的中等级别的随机性(如图 5 所示)。在上述分布中使用这种采样策略,索引 0 有 20% 的概率被选取,而索引 2 有 40% 的概率被选取。

图 5:采样:使用字符级语言建模预测下一个字符的图示。因此,采样过程将在测试时用于一个接一个地生成字符。

def sample(parameters, idx_to_chars, chars_to_idx, n):

Implements sampling of a squence of n characters characters length. The sampling will be based on the probability distribution output of RNN. # Retrienve parameters, shapes, and vocab size Whh, Wxh, b = parameters["Whh"], parameters["Wxh"], parameters["b"] n_h, n_x = Wxh.shape vocab_size = c.shape[0] # Initialize a0 and x1 to zero vectors h_prev = np.zeros((n_h, 1)) x = np.zeros((n_x, 1)) # Initialize empty sequence indices = [] idx = -1 counter = 0 while (counter <= n and idx != chars_to_idx["\\n"]): # Fwd propagation h = np.tanh(np.dot(Whh, h_prev) + np.dot(Wxh, x) + b) o = np.dot(Why, h) + c probs = softmax(o) # Sample the index of the character using generated probs distribution idx = np.random.choice(vocab_size, p=probs.ravel()) # Get the character of the sampled index char = idx_to_chars[idx] # Add the char to the sequence indices.append(idx) # Update a_prev and x h_prev = np.copy(h) x = np.zeros((n_x, 1)) x[idx] = 1 counter += 1 sequence = "".join([idx_to_chars[idx] for idx in indices if idx != 0]) return sequence

拟合模型

在介绍了字符级语言建模背后的所有概念/直觉思想之后,接下来我们开始拟合模型。我么将使用 RMSProp 的默认超参数设置,并迭代地运行模型 100 次。在每次迭代中,我们将输出一个采样的命名,并平滑损失函数,以观察生成的命名如何(随着迭代数的增加和梯度的下降)变得越来越有趣。当模型拟合完成后,我们将画出损失函数并生成一些命名。

def model(file_path, chars_to_idx, idx_to_chars, hidden_layer_size, vocab_size, num_epochs=10, learning_rate=0.01):Implements RNN to generate characters.""" # Get the data with open(file_path) as f: data = f.readlines() examples = [x.lower().strip() for x in data] # Initialize parameters parameters = initialize_parameters(vocab_size, hidden_layer_size) # Initialize Adam parameters s = initialize_rmsprop(parameters) # Initialize loss smoothed_loss = -np.log(1 / vocab_size) * 7 # Initialize hidden state h0 and overall loss h_prev = np.zeros((hidden_layer_size, 1)) overall_loss = [] # Iterate over number of epochs for epoch in range(num_epochs): print(f"\\033[1m\\033[94mEpoch {epoch}") print(f"\\033[1m\\033[92m=======") # Sample one name print(f"""Sampled name: {sample(parameters, idx_to_chars, chars_to_idx, 10).capitalize()}""") print(f"Smoothed loss: {smoothed_loss:.4f}\\n") # Shuffle examples np.random.shuffle(examples) # Iterate over all examples (SGD) for example in examples: x = [None] + [chars_to_idx[char] for char in example] y = x[1:] + [chars_to_idx["\\n"]] # Fwd pass loss, cache = rnn_forward(x, y, h_prev, parameters) # Compute smooth loss smoothed_loss = smooth_loss(smoothed_loss, loss) grads, h_prev = rnn_backward(y, parameters, cache) # Update parameters parameters, s = update_parameters_with_rmsprop( parameters, grads, s) overall_loss.append(smoothed_loss) return parameters, overall_loss

# Load namesdata = open("../data/names.txt", "r").read()# Convert characters to lower casedata = data.lower() # Construct vocabulary using unique characters, sort it in ascending order,# then construct two dictionaries that maps character to index and index to# characters.chars = list(sorted(set(data)))chars_to_idx = {ch:i for i, ch in enumerate(chars)}idx_to_chars = {i:ch for ch, i in chars_to_idx.items()} # Get the size of the data and vocab sizedata_size = len(data)vocab_size = len(chars_to_idx)print(f"There are {data_size} characters and {vocab_size} unique characters.") # Fitting the modelparameters, loss = model("../data/names.txt", chars_to_idx, idx_to_chars, 100, vocab_size, 100, 0.01) # Plotting the lossplt.plot(range(len(loss)), loss)plt.xlabel("Epochs")plt.ylabel("Smoothed loss");

 

There are 36121 characters and 27 unique characters.Epoch 0=======Sampled name: NijqikkgzstSmoothed loss: 23.0709 Epoch 10=======Sampled name: MiltonSmoothed loss: 14.7446 Epoch 30=======Sampled name: DangelynSmoothed loss: 13.8179 Epoch 70=======Sampled name: LaciraSmoothed loss: 13.3782 Epoch 99=======Sampled name: CathrandaSmoothed loss: 13.3380

图 6:平滑化的损失函数

经过 15 个 epoch 之后,生成的命名开始变得有意义。在这里,为简单起见,我并没有展示所有 epoch 的结果;然而,你可以在我的 notebook 里查看完整的结果。其中一个有趣的命名是「Yasira」,这是一个阿拉伯名字。

结论

统计语言模型在 NLP 中非常重要,例如语音识别和机器翻译。我们在此文章中展示了字符级语言模型背后的主要概念。该模型的主要任务是使用一般数据中的命名按字符生成预测命名,该数据集包含 5136 个名字。以下是主要思考:

如果我们有更多数据、更大模型、更长的训练时间,我们可能会得到更有趣的结果。然而,为了得到更好的结果,我们应该使用更深层的 LSTM。有人曾使用 3 层带有 dropout 的 LSTM,应用到莎士比亚诗上获得了很好的结果。LSTM 模型因其获取更长依存关系的能力,性能上比简单的 RNN 更强。

在此文章中,我们使用每个名字作为一个序列。然而,如果我们增加 Batch 的大小,可能会加速学习速度且得到更好的结果。比如从一个名字增加到 50 个字符的序列。

我们可以使用采样策略控制随机性。在这篇文章中,我们在模型考虑的正确字符与随机性之间做了权衡。

最美的句子

数風流人物,還看今朝!

句子可以有多美

梁思成问林徽因:“我只问一次,为什么选择我。”

林徽因:“答案很长,我需要用一辈子来回答,你愿意听吗?”(这是我听到的最暖人的回答。)

1.情不知所起,一往而深。

2.多少红颜悴,多少相思碎,唯留血染墨香哭乱冢。

3.谁执笔但记情成卷,只空忆此去经年。

4.长道相依,几恨别离,锦绣断相思意,待人相惜。

5.黄昏时,等人来敲门。而敲门的人走错时间,也在等黄昏。

6.若我会遇见你,事隔经年。我如何向你招呼,以眼泪?以沉默?

7.生如夏花之绚烂,死如树叶之静美。

有哪些好句子

和你分享一下我珍藏的七月手写版、诗意与美感富集的好句子,希望您有时间能够静下心来细细品味。

1、我有一碗酒,可以慰风尘。

2、愿你的眼中总有光芒,活成你想要的样子。

3、我渴望一生被人收藏好,妥善安放,细心保存。免我惊,免我苦,免我四处流浪,免我无枝可依。

4、行走在路上,与所有人微笑,却只想与你相遇。

5、时间也需要没用的东西,如果一切事物都必须有其意义,会让人喘不过气来。

6、穿山越海,哼你的歌,踏浪飘帆,忘记你,更忘记我。

7、有人信你,有人陪你,有人等你。

8、苦非苦,乐非乐,只是一时执念罢了。执于一念,将受困于一念,一念放下,会自在于心间。

9、容我做个长梦,醒来黄历堆成山,张张都是万事大吉。

10、你最可爱,我说时来不及思索,但思索之后,还是这样说。

11、可遇不可求的事,后海有树的院子,夏代有工的玉,此时此刻的云,二十来岁的你。

12、我没有生来勇敢,天赋过人,面对人山人海,只剩一些诚恳。

13、我选择一条不那么好走的路,是因为想着路上会遇到你。

14、有些时候,失去才是平常,而得到只是幸运。

15、你知道我想说什么吗?你只知道我说了什么。

16、我的心事蒸发成云在下雨,却舍不得淋湿你。17、走过多少辜负,雨打芭蕉哭成狗,总有一个终点,满处花开是人间。

18、我们都需要一个,愿意陪你的人,不需要那么多承诺,给一个适时的拥抱,嘘声后安静地与你走完一生的人。

19、与君初相识,犹如故人归。

20、余生很长,你一定要来。

图片来源于网络。

有哪些好句子

1、某天,你无端想起一个人,她曾让你对明天有所期许,但是却完全没有出现在你的明天里。

2、我淋过最大的一场雨,是那天你在烈日下的不回头。3、如果你真的非常喜欢过一个人,就会知道,要真心祝福她跟别人永远幸福快乐,根本是不可能的事。

4、少年时代的岁月,即使拥有相同的过去,记忆最深的细节也会出现趣味性差异,那就是7属于每个人的,不会重复的时光。

5、“人生总是那么痛苦吗?还是只有小时候是这样?”

“总是如此。”

6、一直以为我跟他不一样,原来寂寞的时候,所有的人都一样。

7、其实爱情是有时间性的认识太早或太晚都是不行的,如果我在另一个时间或空间认识她,这个结局也许会不一样。8、我想成为一个温柔的人,因为曾被温柔的人那样对待,深深了解那种被温柔相待的感觉。

9、我也喜欢,当年喜欢着你的我。那时候的我,简直无时无刻都在发光呢。

文艺句子有哪些

原创:

1.不同的人有不同的故事,而时间就好像一个催化剂般,把这些人紧紧的粘在一起,伴随着喜悦、悲伤、忧愁、坦然的情绪又组成了另一个故事,而正是这些故事拼凑成一个叫做青春的时期。(写于《一起同窗过》的影评中)

2.

你会记起你身边生性怯弱的路桥川,穿衣没品味的肖海洋,泡妞一绝的任逸帆,有品位的余皓,还有浑身技能的毕十三。

似他们可爱的少年,正存在于你的身边,不妨回头一看,顺便打个招呼,嘿,你个任逸帆,又失恋了啊。

你会想起那个让你愤怒不已的钟白,想起那个曾让你思念不已林洛雪,想起那个同为同桌的学霸美女李舒词,也会想起那个单纯可爱的一心,想起他们,你感觉无比幸福

希望,你能抬头看见她们,就能露出微笑,这些曾经在你人生出现过的女孩,你要记得她们所有模样。(写于《一起同窗过》的影评中)

3.

我喜欢你的傻气,喜欢你的善良,喜欢你的姿色,喜欢你能理解我。

我喜欢你答题时的骄傲,我喜欢你辩论时的自信,我喜欢你交流时的傲娇。

我也喜欢你看电视剧遇到脑残剧情哭泣的样子,我也喜欢你跟我吵架生气暴走的样子。

4.

看完电影,我一直在思索,爱情应该是个什么模样?我想,应该是,我爱她年轻时貌美的容貌,也爱她年老时布满皱纹的脸庞;我爱她成为优胜者的喜悦,也爱她成为失败者的不堪;我爱她富贵背后的贫穷,也爱她健康背后的疾病。(写于《一天》的影评中)

以上.....不知道算不算是文艺。


非原创,但是这些句子非常喜欢,一直保存着

1.他是个十六岁的少年,真正的少年,看着春风不喜,看着秋风不悲,看着冬雪不叹,看着夏蝉不烦,他看着喜欢的才喜,看着厌憎的便烦,看着不公平的便叹,看到夕阳下的壮烈背影才悲。——猫腻 择天记

2.人类的一个大麻烦,在于我们无法拥有说一不二的感情。敌人身上总有让我们喜欢的地方,我们的爱人总会有让我们讨厌之处。正是这种纠结不清的情感催我们变老,让我们皱起眉头,加深我们眼周的皱纹。要是我们能像仙人一样全心全意地爱或者恨,我们也许就能像他们那样长生不老了。不过,在这一天到来之前,他们永不衰竭的快乐和悲哀在很大程度上正是他们的魅力所在。他们的爱从不知疲倦,星辰的轮回也绝不会让他们放慢舞步。 ——Yeats 《凯尔特的薄暮》

3.当你老了,回顾一生,就会发觉:什么时候出国读书,什么时候决定做第一份职业、何时选定了对象而恋爱、什么时候结婚,其实都是命运的巨变。只是当时站在三岔路口,眼见风云千樯,你作出选择的那一日,在日记上,相当沉闷和平凡,当时还以为是生命中普通的一天。 ——《杀鹌鹑的少女》

4.我梦见暮年时的自己 佝偻着背 衣衫褴褛 走在一条去往地狱的泥泞路,一生的罪恶 一帧一帧浮现 童年的乖戾 少年的孤傲 中年的荒唐 如刺刃 似冰锥 割破时光 血脉贲张,生途淬凝为尘 风吹即散。·可是往来光景尽是虚无 浅笑轻颦 梦不过一场落花 不必 不必记挂。(来源不祥)

5.在米切尔女士的巨作《飘》的结尾,白瑞德有一段很著名的话:

我从来不是那样的人,不能耐心地拾起一片碎片,把它们凑合在一起,然后对自己说这个修补好了的东西跟新的完全一样。一样东西破碎了就是破碎了——我宁愿记住它最好时的模样,而不想把它修补好,然后终生看着那些碎了的地方。——《飘》

6.当一个女人决定和一个男人睡觉时,就没有她跃不过去的围墙,没有她推不倒的堡垒,也没有她抛不下的道德顾虑,事实上没有能管得住她的上帝。谨慎做这样的决定。 ——加西亚·马尔克斯 《霍乱时期的爱情》

7.我曾经七次鄙视我的灵魂 第一次当它本可进取时却故作谦卑第二次当它在空虚时用爱欲来填充第三次在困难和容易之间它选择了容易第四次它犯了错却借由别人也会犯错来宽慰自己第五次它自由软弱却把它认为是生命的坚韧第六次当它鄙夷一张丑恶的嘴脸时却不知那正是自己面具中的一副第七次它侧身于生活的污泥中虽不甘心却又畏首畏尾 ——纪伯伦《我曾七次鄙视自己的灵魂》

8.我行过许多地方的桥,看过许多次数的云,喝过许多种类的酒,却只爱过一个正当最好年龄的人。 ——沈从文《湘行散记》

9.几乎人类所有的残忍都具有一种游戏的表象,

而多数的游戏中,都埋藏着一种残忍的本质。(唐映枫)

哪些句子比较唯美

  1. 心清一切明,心浊一切暗;心痴一切迷,心悟一切禅。心是人生戏的导演,念是人生境的底片。一切唯心造源皆在内心,世界是人心的倒影,境界是人心的幻化。痴与执、怨与恨,只会让心翻滚、令人不安。放下它们才能轻松自然。智慧愚痴心之隔,天堂地狱一念间。烦恼放下成菩提,心情转念即晴天。

  2. 真正的修行不是逃离,不是躲避,而是欣然的面对,全然的接受,接受此刻你正在经历的一切好与坏。

  3. 你不可能同时拥有春花和秋月,不可能同时拥有硕果和繁花。你要学会权衡利弊,学会放弃一些什么,然后才可能得到些什么。你要学会接受命运的残缺和悲哀,然后,心平气和。因为,这就是人生。

  4. 心小了,所有的小事就大了;心大了,所有的大事都小了。大事难事,看担当;逆境顺境,看胸襟;是喜是怒,看涵养;有舍有得,看智慧;是成是败,看坚持。凡事顺其自然;遇事处之泰然;得意之时淡然;失意之时坦然;艰辛曲折必然;历尽沧桑悟然。饮清净之茶,闭是非之口,结悟道之友。

  5. 其实生活中只有三件事,自己的事,别人的事和老天爷的事。你要知道,你只需要做好自己的事,老天爷的事你管不了,别人的事与你无关。

  6. 有些事,你真别看清,看清,心痛;有些人,你真别看懂,看懂,伤情。人生,就是一种糊涂,一份模糊,说懂不懂,说清不清,糊里糊涂,含含糊糊。人生看不惯的东西太多,看清、看懂,全是自找伤心。给生活罩上一层薄雾,不是自欺,而是对自我的保护。凡事太认真,苦了心,累了自己。

  7. 别让自己心太累,应该学着想开,看淡,学着不强求,学着深藏,适时放松自己,寻找宣泄,给疲惫的心灵解解压。人之所以会烦恼,就是记性太好。该记的不该记的都会留在记忆里,而我们又时常记住了应该忘掉的事情,忘掉了应该记住的事情。人之所以活着累,就是想得要的太多了。

  8. 这个浮躁的时代,心若能静下来,我们的才华潜能才能发挥出来。请记得时常静观内心,真正的财富、真正的悠闲、真正的风景只在人的内心里。幸福本身不取决于你得到多少,而是决定于你感受到了多少。幸福,不是长生不老,不是权倾朝野,不是拥有呼风唤雨的能力,而是拥有淡看风云的胸怀。

  9. 看起来幸福的人,心里也有难言的苦;时常微笑的人,心里也有无声的泪;炫耀生活的人,可能远没表面那么风光。一个人的幸福,只有自己懂得生活的快乐。所以,不要跟自己过不去,不要纠结于别人的评说,照自己舒服的感觉生活。幸福如人饮水,冷暖自知,你的幸福,不在别人眼里,而在自己心里。

  10. 人生不过是一张清单,你要的,你不要的,计算得太清楚的人通常聪明无比,但,换来的却是烦恼无数和辛苦一场。

  11. 心中无缺叫富,被人需要叫贵;快乐不是一种性格,而是一种能力。解决烦恼的最佳办法,就是忘掉烦恼;笑看风云淡,坐看云起时,不争就是慈悲,不辩就是智慧,不闻就是清净,不看就是自在,原谅就是解脱,知足就是放下;不乱于心,不困于情。不畏将来,不念过往。如此,安好!

  12. 人要心静,言多必失。喋喋不休不如观心自省,埋怨他人不如即听即忘。能干扰你的,往往是自己的太在意,能伤害你的,往往是自己的想不开。你若平和,无人可恨,你若不究,无人能扰。

  13. 不要把生活看得那么复杂,多什么少什么,爱什么恨什么,把所有的复杂都简单化。端起饭碗感谢这美好的一天,心头清闲感谢这曲折人间,想到的就是你活到的,放过的就是你拥有的,既然来着人间不纠结,那么就活一场豁然开朗,或者大肚能容。烦恼又不给一分钱的报酬,何苦去替它履行什么。

  14. 得意时要看淡,失意时要看开。人生有许多东西是可以放下的。只有放得下,才能拿得起。尽量简化你的生活,你会发现那些被挡住的风景,才是最适宜的人生。千万不要过于执着,而使自己背上沉重的包袱。

  15. 痛苦是比较出来的,幸福是珍惜得来的。越是计较,心理越不平衡,越不平衡,烦恼越多,我们因此变得不从容。

  16. 无事心不空,有事心不乱,大事心不畏,小事心不慢。人生的悲欢离合,酸甜苦辣,皆系于心,心态若安好,有什么是真正过不去的坎呢?身在红尘之中,凡事以善为本,有所为,有所不为,心自然日趋平和、宁静,如开放的莲花一样自然,从容,不为谁开不为谁落。

  17. 心本来不大,不要背负太多。对昨天的纠结,最终只是囚禁了今天和明天。人生,一定要学会释放!

  18. 不要过份在意一些人,过份在乎一些事,顺其自然,以最佳的心态面对。每个人的性格中,都有某些无法让人接受的部分,再美好的人也一样。所以不要苛求别人,不要埋怨自己。玫瑰有刺,因为是玫瑰。

  19. 学会让自己安静,把思维沉浸下来,渐渐减少对事物的欲望;学会让自我常常归零,把每一天都当作是新的起点。遇到心情烦躁的时候,喝一杯清茶,放一曲舒缓柔和的音乐,闭眼,回味身边的人与事,慢慢梳理新的未来;或者盘腿打打坐,读读经。这些既是一种休息,也是一种修行。

  20. 心静了,才能听见自己的内心。也许,你正狂热追求的,并非你真正想要的,只是迁就了别人或社会;也许,你正为之苦恼,肝肠寸断的,未必是你真正想爱或该爱的,只是一时的不甘心。坐下来,静赏花开水流,心静了,自然就看清了。笑看花开,是一种宁静的喜悦;静赏花落,是一份随缘的自在。

  21. 人生,哪能事事如意;生活,哪能样样顺心。不和小人较真,因为不值得;不和社会较真,因为较不起;不和自己较真,因为伤不起;不和往事较真,因为没价值;不和现实较真,因为要继续。因为善良,所以宽容;因为责任,所以承担;因为某种理由,所以愿意妥协。因为看轻,所以快乐;因为看淡,所以幸福。

  22. 我们常常为错过一些东西而感到惋惜,但其实,人生的玄妙,常常超出你的预料,无论什么时候,你都要相信,一切都是最好的安排。

  23. 总有一些事情,让你在不经意中,就看清了一些人。用心甘情愿的态度,过随遇而安的生活。

  24. 世间上没有一样东西是永远属于你的,包括你最爱的人,养大的孩子,包括你的财富,你的身体,最后也会回归尘土。世间的一切我们只有使用权而非永久拥有权。世间的一切都是借给我们用的……所以,凡事都有缘起缘灭,强求不得。人生如过客,欢欢喜喜的来,高高兴兴地走。最重要的是,把握当下。

  25. 水的清澈,并非因为它不含杂质,而是在于懂得沉淀;心的通透,不是因为没有杂念,而是在于明白取舍。

  26. 生活不是用来妥协的,你退缩得越多,能让你喘息的空间就越有限;日子不是用来将就的,你表现得越卑微,一些幸福的东西就会离你越远。在有些人前,不必一而再的容忍,不能让别人践踏你的底线。只有挺直了腰板,世界给你的回馈才会多点。

  27. 人一辈子,你得信这一条:留得住的不需用力,留不住的不需费力。来去随缘,强求不得。

  28. 置身事外,谁都可以心平气和,身处其中,谁还可以淡定从容,所以请不要轻易评论任何人,因为你不在其中。

  29. 拼命对一个人好,生怕做错一点对方就不喜欢你,这不是爱,而是取悦。分手后觉得更爱对方,没他就活不下去这不是爱情是不甘心。

  30. 多心的人总是胡思乱想,结果是困在一团乱麻般的思绪中,动弹不得。有时候,与其多心,不如少根筋。

  31. 你厌恶一些人,你看不惯一些事情,你都不必去叫嚣,去反抗,去诋毁,你只要选择与其隔断联系就好了。就像大海行船,我们无需知晓每一处暗礁,只要往更深处行驶,不与其遭遇就好了。

  32. 没成功时,说起受的苦难会痛哭;成功时,说起苦难会欣慰激昂。年轻时,经历少一点痛苦都委屈地大哭;中年时痛苦经历多了,说着说着就笑了;老年时,痛苦也不觉得是痛苦了。其实,真正的大痛是说不出来的,连呜咽都不会有,已经沉滞在心的深处。

  33. 没事千万不要翻自己以前的状态,不然你会想掐死几年前那个磨磨唧唧矫情作死的你。生活就是如此,给了你想要的,就会拿走你更在乎的。今天的我,你爱搭不理,明天的我,你高攀不起。

  34. 认识的人越少越好,不要沾染任何圈子,更不要以认识谁见过谁而作为吹牛资本,沉住气,别去巴结谁,别人的奇迹和你无关,得不到的不要去追,让自己生气的东西永远别搭理,多看书,多走路,心情好了上学路上都是旅行。

  35. 人生看不惯的东西太多,看清、看懂,全是自找伤心。凡事太认真,苦了心,累了自己。

  36. 一段路,走了很久,依然看不到希望,那就改变方向;一件事,想了很久,依然纠结于心,那就选择放下;一些人,交了很久,却感觉不到真诚,那就选择离开;一种活法,坚持了很久,依然感觉不到快乐,那就选择改变。我是胖胖,感恩生活,分享快乐!认真回答每一个问题,用心结交每一位朋友,谢谢阅读,认同请转发和点赞。

如何缩写句子